第三章 实方式指寻址与指系统.ppt

上传人:s****8 文档编号:68957882 上传时间:2022-12-30 格式:PPT 页数:103 大小:1.10MB
返回 下载 相关 举报
第三章 实方式指寻址与指系统.ppt_第1页
第1页 / 共103页
第三章 实方式指寻址与指系统.ppt_第2页
第2页 / 共103页
点击查看更多>>
资源描述

《第三章 实方式指寻址与指系统.ppt》由会员分享,可在线阅读,更多相关《第三章 实方式指寻址与指系统.ppt(103页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第3章 实方式指令寻址与指令系统n3.1 指令的基本指令的基本寻址方式寻址方式n3.2 实实方式方式32位指令位指令寻寻址址 n3.3 实实方式指令系方式指令系统统n3.4 字符字符设备设备I/O功能功能调调用用3.1指令的基本寻址方式 n8086 CPU的指令系统的基本指令包括:数据传送类指令数据传送类指令 算术运算类指令算术运算类指令 位操作类指令位操作类指令 串操作类指令串操作类指令 控制转移类指令控制转移类指令 处理机控制类指令处理机控制类指令3.1.1指令的基本格式 n大多数数据传送类指令、算术运算类指令、位操作类指令及串操作类指令,其操作数指令有相同的语句格式和操作规定。n指令一般

2、由操作码OP、寻址方式MOD和一个或多个操作数OD等字段组成。操作码OP寻址方式MOD操作数OD指令的表示形式nPC微机的多数指令有一个或两个操作数,当然也可以没有操作数,常见的表示形式如下:OPOP 操作数操作数 OP 目的操作数目的操作数 ,源操作数源操作数 示例:n单操作数指令只需指定一个操作数。例如将寄存器AX的内容加1后,其和回送到AX,指令的符号表示形式为:INC AX ;AX+1-AXn双操作数指令需要指定两个操作数.当源操作数和目的操作数进行运算后,多数指令将其结果回送到目的操作数的位置。例如寄存器BX与CX的内容相减后,其差送入BX的指令为:SUB BX,CX ;BX-CX-

3、BXn没有操作数指令,即隐含操作数指令,是指在OD位置虽然未明确给出操作数,但在指令OP中隐含有事先安排的操作数。例如:CLC ;0-CF3.1.2 寻址方式n立即寻址n寄存器寻址n直接寻址n寄存器间接寻址n寄存器相对寻址n基址变址寻址n相对基址变址寻址立即寻址(Immediate Addressing)n立即寻址方式中,指令操作码和操作数都在存储器代码段中。n汇编格式:n(n为立即操作数,是用8位或16位二进制补码表示的有符号数)n功能:操作数存放在存储器,指令下一单元的内容为立即操作数n。n图形表示:示例nMOV AX,10执行后(AX)=?该例中源操作数为立即寻址方式,立即数为10,存放

4、在指令的下一单元。执行:10AX执行后:(AX)=000AH 图形表示:寄存器寻址(Register Addressing)n寄存器寻址方式的操作数在指令指明的寄存器中。功能:操作数直接存放在寄存器中。n图形表示:寄存器寻址示例:n下列程序执行后,(AX)=?,(BX)=?MOV AX,1234H MOV BX,5678H ADD AX,BXn该程序中MOV指令为数据传送指令操作符,ADD指令为加法指令操作符,三条指令皆为双操作数指令。第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。第三条指令中,AX为目的操作数地址,BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。n执行

5、:1234HAX 5678HBX (AX)+(BX)AXn执行后:(AX)=68ACH,(BX)=5678Hn图形表示:寄存器寻址示例(续):直接寻址(Direct Addressing)n指令操作码OP后直接给出操作数的16位偏移地址EA。OP与直接地址在代码段,操作数据一般在数据段。n功能:指令下一字单元的内容是操作数的偏移地址EA。n PA=DS*16+NNn图形表示:直接寻址示例:n寄存器和存储器内容为:(AX)=1212H,BUF为数据段定义的变量,其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。执行指令:MOV AX,BUF执行后:(AX)=?执行:(3

6、2000H)AX执行后:(AX)=4545H图形表示:寄存器间接寻址(Register Indirect Addressing)n寄存器间接寻址方式中,寄存器R的内容为操作数的偏移地址EA,操作数在存储器中,即:EA=BX/BP/DI/SI功能:操作数存放在存储器,寄存器R存放操作数的偏移地址EA。PA=DS*16+BX/SI/DI PA=SS*16+BP【例】寄存器和存储器内容分别为:(AX)=0,(BP)=0030H,(SS)=2000H,(20030H)=1234Hn执行指令:MOV AX,BP n执 行 后:(AX)=?,(BP)=?,(SS)=?,(20030H)=?n图形表示如右:

7、寄存器间接寻址示例:寄存器相对寻址(Register Relative Addressing)n寄存器相对寻址方式操作数的偏移地址EA为寄存器的内容加位移量,操作数在存储器中。n汇编格式:XR(X表示位移量,是8位或16位二进制补码表示的有符号数)n功能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。PA=DS*16+BX/SI/DI+X PA=SS*16+BP+Xn图形表示如下:寄存器相对寻址图示:寄存器相对寻址示例:n设执行前:(AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H n执行指令:ADD 6BX,AXn执 行 后:

8、(AX)=?,(BX)=?,(DS)=?,(20036H)=?n图形表示如下:执行:(执行:(20036H)+(AX)20036H执行后:(执行后:(AX)=0040H,(,(BX)=0030H,(DS)=2000H,(,(20036H)=0090H。寄存器相对寻址示例(续):基址变址寻址(Based Indexed Addressing)n基址变址寻址方式中,操作数的偏移地址EA是指令中基址寄存器内容加上变址寄存器内容之和,操作数在存储器中。n汇编格式:BR+IRn功能:操作数存放在存储器,BR的内容加IR的内容是操作数的偏移地址EA。PA=DS*16+BX+/SI/DI PA=SS*16+

9、BP+SI/DIn图示如下:基址变址寻址图示:相对基址变址寻址(Relative Based Indexed Addressing)n相对基址变址寻址方式中,操作数的偏移地址EA是指令中基址寄存器内容、变址寄存器内容、位移量三项之和,操作数在存储器中。n汇编格式:XBR+IRn功能:操作数存放在存储器,BR的内容加IR的内容加位移量X是操作数的偏移地址EA。PA=DS*16+BX+/SI/DI+X PA=SS*16+BP+SI/DI+Xn图形表示:相对基址变址寻址图示:3.1.3数据寻址与数据结构的关系n多种寻址方式能方便、灵活的存取操作数,支持高级语言的某些数据结构。n1.简单变量寻址n2.

10、数组或表格数据的寻址n3.记录型数组的寻址 1.简单变量寻址 存取简单变量有时使用直接寻址方式如果变量有基本地址就将基本地址-BX/SI/DI,则存取某个变量 EA=BX/SI/DI2.数组或表格数据的寻址 表格数据的存取也可当作是数组的存取,均可用寄存器、寄存器相对、基址变址喝相对基址变址等寻址方式。n(1)存取基本数组:数组的基本地址-BX,某个元素到数组基本地址的距离-SI/DI,则:EA=BX+SI/DI 或者位移量DISP=数组开始地址,BX/SI/DI=数组元素到数组开始地址的距离,则:EA=BX+BX/SI/DI +DISP2.数组或表格数据的寻址(续)n(2)对于赋值语句A(i

11、)=B(j)应指出两个变址寄存器。如对应元素ai可使用DI;对应元素bj用SI,则两组元素的地址分别为:EA=SI+DISP EA=DI+DISP n(3)存取二维数组A(i,j):数组起始地址-BX,BX兼行元素相对数组起始地址变址,而列元素又相对行元素的变址量-SI/DI,则存取某个元素应有:EA=BX+SI/BX+DIn若DISP=数组元素的起始地址,BX=行元素变址量,SI 或 DI=列元素相对行元素的变址,则存取某个元素应有:EA=BX+SI/DI+DISP3.记录型数组的寻址n数组和记录结合使用。设雇员的记录有四个数据项(雇员、保险号、雇龄和工资),由多个雇员的记录组成一个数组,则

12、任一雇员记录项地址的形式描述为 F=f(M,I,J)其中,F为数组记录项的地址,M为数组的基本地址,I为数组的元素(记录),J为元素的数据项,f则表示记录型数组。对此,存取任一记录中的数据项(如雇龄项)的操作数寻址对应描述为:偏移地址=f(基址,变址,位移)3.记录型数组的寻址(续)n假定基址指针再BX,与数组元素相一致的变址值在SI,记录中项的位置用DISP表示,则 EA=BX+SI+DISP。n4.堆栈数据结构寻址n堆栈采用以BP为基址指针的寻址,方便数据结构相同而参数不同的数据存取。当存取堆栈中的简单变量时 EA=BP+DISP 若存取堆栈中的数据和记录,则 EA=BP+SI/DI+DI

13、SP3.1.4程序转移寻址n寻址方式对多数指令而言,是要计算出操作数的地址,但是也由少数指令是为了形成程序转移的地址(如无条件转移指令JMP、调用指令CALL等)。n程序正常顺序执行时,每取出一条指令执行IP+n-IP,其中n为取出指令的字节数;然后形成下一条指令的地址:PA=CS*24+IPn但是如果程序发生转移时,需要计算出转移偏移地址EA并修改IP,有时还需要修改CS的值。这种情况操作的对象是一个地址,地址的内容是要取出的指令,而不是上述讲到的操作数,因此称之为程序转移寻址。程序转移方式:n段内转移是指程序在同一段代码内,仅改变IP的值而不改变CS的值所发生的转移。n而段间转移是程序要从

14、一个代码段转移到另一个代码段,则不仅改变IP的值,同时也要改变CS的值。n无论是段内还是段间发生的转移都有直接和间接的形式,因此程序转移有四种寻址。段内转移图示n段内直接转移和间接转移寻址如下图:n1.段内直接寻址(Intrasegment Direct Addressing)转移偏移地址EA是指令中8位或16位位移量(DISP8,16)与指令指针IP当前内容之和。即:EA=IP+DISP8,16-IPn2.段内间接寻址(Intrasegment Indirect Addressing)转移偏移地址 EA 如果指定的是16位的寄存器,则将寄存器的内容-IP。如果指定的是存储器中的一个字,则将该

15、存储单元的内容-IP。(EA)-IP段内转移过程段间转移图示n程序段间的直接或间接转移如下图:段间转移过程n1.段间直接寻址(Intersegment Direct Addressing)n 转移偏移地址EA-IPn 转移段地址-CSn2.段间间接寻址(Intersegment Indirect Addressing)n(EA)-IPn(EA+2)-CS3.23.2实方式实方式3232位指令地址位指令地址n 实地址方式32位指令寻址,指在32位的PC机上使用16位的存储机制,执行32位的非保护方式及非虚拟方式的指令,达到直接存取32位寄存器和32位存储器操作数的目的。3.2.1数据与地址类型n

16、几个概念n位域:一个相邻的位系列,在该序列中每一个作为一个独立的单位处理,一个位域可以从任何字节的任何位置开始。n位串:相邻位的序列,可以从任何字节的任何位置开始。n串:字节、字、双字的序列。n实方式的近程指针:16位的段内偏移值。3.2.2 32位的指令寻址方式n偏移地址EAn EA=基址变址 比例因子位移量n基址寄存器可以是任意一个32位通用寄存器。n变址寄存器是指除了堆栈指针ESP以外的7个通用寄存器。n比例因子是1、2、4、8可以分别用于字节、字、双字、四字的变址。n常数位移量可以指8位或32位。32位的寻址方式图示n如果使用ESPEBP为基址寄存器,则SS是默认的段寄存器,也可用CS

17、、DS、ES、FS、GS来替换SS;n使用EAX、EBX、ECX、EDX、ESI、EDI为基址寄存器,则DS是默认的段寄存器,同样也能用CS、SS、ES、FS、GS来越段替换DS32位的指令寻址方式示例:nMOV AX,DS:BP nMOV FS:EBP,ECX;DS、FS分别替换了缺省段SS32位的指令寻址方式示例(续)n为了取得指令代码,只能用CS;PUSH、POP等指令与堆栈有关,也只能用SS。此外,在指令代码32位的程序堆栈操作时,要确保ESP/SP的内容(地址)总是为4的倍数。n例如:nPUSH 12345678H n;ESP/SP-4-ESP/SP,12345678-ESP/SP

18、POP EAX ;(ESP/SP)-EAX,ESP/SP+4-ESP/SP3.2.3 实地址32位指令寻址n 32位的指令寻址包括数据寻址和程序转移寻址。一般寻址的基本概念与16位汇编寻址概念相似,特殊的寻址方式如上叙述。现介绍如下:1、非存储器的数据寻址方式示例n(1)立即寻址n MOV EAX,19461201H;19461201H-EAX 与16位寻址相似。(2)寄存器寻址nMOV EAX,ECX ;ECX-EAX 与16位寻址相似2、存储器的数据寻址方式示例n(1)直接寻址nMOV EAX,4612H ;EA=4612,(EA)-EAX 与16位寻址相似。n(2)寄存器间接寻址nMOV

19、 ECX,EDX ;ECX间接指示存放操作数EA在EAX 中,EA=ECX,EDX-EA,与16位寻址相似。存储器的数据寻址方式示例(续)n(3)寄存器相对寻址nMOV ECX,EAX+24 ;EA=EAX,(EA)-ECXn(4)基址变址寻址nMOV EAX,EBX ESI;EA=EBX+ESI,(EA)-EAXn(5)相对基址变址寻址nSUB EAX,EBX+ESI+0FF0H ;EA=EBX+ESI+0FF0H,EAX-(EA)-EAX存储器的数据寻址方式示例(续)(6)带比例因子的变址nMOV ECX,ESI*4 ;EA=ESI4,(EA)-ECX(7)基址与带比例因子的变址寻址nMO

20、V ECX,EAXEDX*8 ;EA=EAX+EDX8,(EA)-ECX(8)基址与带位移量及比例因子的变址寻址nMOV EAX,LTABEDI*4EBP+80 ;EA=LTAB+EDI4+EBP+80,(EA)-EAX3.程序转移寻址方式n有相对EIP的段内直接寻址,段内间接寻址、段间直接寻址和段间间接寻址。4.前缀代码67H或66Hn32位机汇编指令或有32位操作数的情形识别涉及指令机器码格式的有关前缀表示。这些在相应的汇编列表文件(*.LST)或DEBUG过程中可以看到,如前缀代码67H或66H。(1)机器指令操作数长度属性前缀码66Hn66|83 E0 0F AND EAX,0FH ;

21、EAX0FH-EAX 66|8B CB MOV ECX,EAX(2)机器指令寻址长度续性前缀n67|8B 1475 00000026 MOV DX,26HESI*2n67|66|8B 04B0 MOV EAX,EAX+ESI*43.3实方式指令系统n指令系统是一台机器所有指令的集合。Pentium系列机指令系统庞大、类型多样,约有300多条指令,其中包括基本指令100多条。具有支持多进程、多任务、虚拟存储器和多媒体等功能的32位指令。3.3.1常用指令类型集n1.数据传送类指令n2.算术运算类指令n3.逻辑和移位操作类指令n4.串操作与重复前缀类指令n5.控制转移类指令n6.处理机控制类指令n

22、7.其它指令本讲义约定:nOPD表示目的操作数;OPS表示源操作数;(OPS)表示OPS的内容;(OPD)表示OPD的内容;-表示传送;R表示通用寄存器;Sr表示段寄存器;M表示主存储器;nXXXX:XXXX 表示组合号,“:”表示其前后组成一个数;L表示操作数的长度;d表示立即数;B/W/D表示字节或字或双字。3.3.2数据传送类指令n通用数据传送指令n堆栈操作指令n标志寄存器传送指令n地址传送指令n输入输出指令通用数据传送指令n1.传送指令MOVn2.数据交换指令XCHGn3.查表转换指令 XLAT语句格式:MOV OPD,OPSn功能:将源操作数传送入目的地址,源地址内容不变。即(OPS

23、)OPD。n下图描述了MOV指令在传送数据时允许传送的路径及类型。1.传送指令MOV注意:n(1)OPD,OPS的类型(8/16/32位)必须一致.n(2)OPD不能使用立即数。n(3)双操作数不能同时为内存中的数据。n(4)段寄存器不能直接送立即数.n(5)指令执行后不影响FLAGS的标志位的状态.n(6)不能任意改变CS示例:存储器与寄存器间数据传送。nMOV AX,BUF ;BUF是变量,源操作数为直接寻址nMOV BH,DI ;源操作数为寄存器间接寻址nMOV DI,ES:3SI ;源操作数为变址寻址,使用跨段前缀nMOV BP,3BX+SI ;源操作数为基址加变址寻址nMOV BUF

24、A,DL ;BUFA是一字节变量nMOV BP,AX ;使用SS段寄存器nMOV DS:BP,DL ;使用跨段前缀nMOV BUF,DS ;BUF是个字变量nMOV ES,BUF2.数据交换指令XCHGn语句格式:XCHG OPD,OPSn功能:将源地址与目的地址中的内容互换。即(OPD)OPS,(OPS)OPD。n寄存器与存储器之间数据交换。nMOV AX,5678H;(AX)=5678HnMOV BX,0FFFFH;(BX)=0FFFFHnXCHG AX,BX;(AX)=0FFFH,(BX)=5678HMOVSX和MOVZX指令n格式:MOVSX OPD,OPS MOVZX OPD,OPS

25、n它们将OPS的内容-OPD,但是对于OPD左边空缺的位,MOVSX全部用OPS的符号填充(作符号延伸),可以对有符号的数进行符号扩展;而MOVZX是全部以零(0)填充,可对无符号数进行0扩展.注意:OPD的位数比OPS的位数长示例:nMOV CL,88H MOVZX AX,CL ;AX=0088H MOVSX BX,CL ;BX=FF88Hn另外也可如下书写指令:nMOVSX CX,BL MOVSX EAX,BUFnMOVZX AX,CL MOVSX EBX,ALnMOVZX ESI,BUF MOVZX EDX,DI3.查表转换指令 XLAn语句格式:XLAT OPS或XLATn功能:将(B

26、X)为首址(AL)为位移量的字节 存 储 单 元 中 的 数 据 送 AL寄 存 器。即(BX+AL)AL。堆栈操作指令n1.进栈指令PUSHn2.出栈指令POPn3.PUSHA/PUSHAD指令n4.POPA/POPAD指令1进栈指令PUSHn语句格式:PUSH OPS ;W/D,R/Sr/M/dn功能:将寄存器、段寄存器、立即数或存储器中的一个字数据压入堆栈顶部,指令视操作数长度为字(2字节)或双字(4字节)和地址为16位/32位,先将SP/ESP-2/4-SP/ESP,后将OPS-SP/ESP。2出栈指令POPn语句格式:POP OPD ;W/D,R/Sr/M/dn功能:视OPD长度为字

27、或双字,先将当前SP/ESP指向的内容-OPD,后将SP/ESP+2/4-SP/ESP。n从POP指令功能可看出,该指令为PUSH指令的逆过程,一般成对使用。3.PUSHA/PUSHAD指令n格式:PUSHA ;压入8个字通用寄存器.PUSHAD;压入8个双字通用寄存器.4.POPA/POPAD指令n格式:POPA ;弹出到8个16位通用寄存器 POPAD;弹出到8个32位通用寄存器标志寄存器传送指令n1.标志送AH指令LAHFn2.AH送标志指令SAHFn3.标志寄存器进栈指令PUSHFn4.标志寄存器出栈指令POPF1标志送AH指令LAHFn语句格式:LAHFn功能:将标志寄存器的低8位送

28、入AH寄存器。即(FLAGS)7-0AH。该指令的执行对标志位无影响。n【例】标志寄存器传送。执行前:(FLAGS)=0485H,(AX)=0FFFFH执行指令:LAHF执行后:AH=85H2AH送标志指令SAHFn语句格式:SAHFn功能:将AH的内容送入标志寄存器的低8位,高8位不变。即(AH)FLAGS7-0。n从该指令功能可看出,SAHF为LAHF的逆过程。3标志寄存器进出栈指令PUSHF/POPFn语句格式:nPUSHF 功能:将标志寄存器的内容压入堆栈。即(FLAGS)-堆栈。nPOPFn功能:将堆栈顶端的内容送到标志寄存器。即堆栈-(FLAGS)。地址传送指令n1传送偏移地址指令

29、 LEAn2传送偏移地址及数据段首址指令LDSn3传送偏移地址及附加数据段指令LES1传送偏移地址指令 LEAn语句格式:LEA OPD,OPS;OPS的EA-OPD ;OPD是16/32位的R,OPS是Mn功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。n【例】主存偏移地址的获取。MOV BX,0100H;(BX)=0100HMOV SI,0210H;(SI)=0210HLEA BX,1234BX+SI;(BX)=1544H2LDS/LES/LFS/LGS/LSS指令n语句格式:LDS/LES/LFS/LGS/LSS OPD,OPS;EA=OPSn功能:地址传送LDS等指

30、令中,OPD为R(16位),OPS为M(32位).操作对FLAGS无影响,执行后结果为:(EA)-R ;全程指针的偏移地址(EA+2)-LDS/LES/LFS/LGS/LSS;全程指针的段地址输入输出指令n1输入指令INn2输出指令OUT1输入指令INn输入指令用来从指定的外设寄存器取信息送入累加器。它有四种形式:n(1)语句格式:INAL,PORT 功能:(PORT)ALn(2)语句格式:INAX,PORT 功能:(PORT)AXn(3)语句格式:INAL,DX 功能:(DX)ALn(4)语句格式:INAX,DX 功能:(DX)AX2输出指令OUTn输出指令用来把累加器的内容送往指定的外设存

31、储器,它有四种形式:n(1)语句格式:OUTPORT,AL 功能:(AL)PORTn(2)语句格式:OUTPORT,AX 功能:(AX)PORTn(3)语句格式:OUTDX,AL 功能:(AL)DXn(4)语句格式:OUTDX,AX 功能:(AX)DX3.3.3 位操作类指令逻辑运算指令n1求反指令NOTn2逻辑乘指令ANDn3测试指令TESTn4逻辑加指令ORn5按位加指令XORn语句格式:NOT OPDn功能:将目的地址中的内容逐位取反后送入目的地址。即(OPD)求反OPD 【例】逻辑非运算。MOVAX,878AH;(AX)=878AHNOTAX ;(AX)=7875H1求反指令NOTn语

32、句格式:AND OPD,OPSn功能:将目的操作数和源操作数进行逻辑乘运算,结果存目的地址。即(OPD)(OPS)OPD。该指令用于清除目的操作数中与源操作数置0的对应位。说明:逻辑乘的运算法则为:11=1,10=0,01=0,00=0【例】将AL中第3位和第7位清零。MOVAL,0FFH ANDAL,77H 2逻辑乘指令ANDn语句格式:TEST OPD,OPS功能:源地址和目的地址的内容执行按位的逻辑乘运算,结果不送入目的地址。即(OPD)(OPS)。【例】测试AX中的第12位是否为0,不为0则转L。TEST AX,1000HJNE L 3测试指令TESTn语句格式:OR OPD,OPS功

33、能:将目的操作数和源操作数进行逻辑加运算,结果存目的地址。即(OPD)(OPS)OPD。说明:逻辑加的运算法则为:11=1,10=1,01=1,00=0。【例】将AL寄存器中第3位和第7位置1。MOVAL,0 OR AL,88H 4逻辑加指令ORn语句格式:XOR OPD,OPS功能:目的操作数与源操作数做按位加运算,结果送入目的地址。即(OPD)(OPS)OPD。说明:按位加的运算法则为;11=0,10=1,01=1,00=0。【例】按位加运算。MOVAL,45H;(AL)=45HXORAL,31H;(AL)=74H5按位加指令XOR移位指令 n移位指令包括算术移位指令、逻辑移位指令和循环移

34、位指令,分别进行左移和右移操作。这些指令均有统一的语句格式:SAL/SHL OPD,OPS ;左移SAR OPD,OPS ;算术右移 SHR OPD,OPS ;逻辑右移其中,OPD是8/16/32位的R/M;OPS是计数值(即移位次数),有三种情形:OPS即可是8位的立即数或CL的内容(移位前次数-CL)。其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。语句格式:SAL OPD,1 或SHL OPD,1 SAL OPD,CL或SHL OPD,CL功能:将(OPD)向左移动CL

35、指定的次数,最低位补入相应的,的内容为最后移入位的值。1算术左移和逻辑左移指令SAL(SHL)语句格式:SAR OPD,1或SAR OPD,CLnCF功能:将(OPD)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。2算术右移指令SARMOVBH,0F4H;(BH)=0F4HMOVCL,2;(CL)=2SARBH,CL;(BH)=0FDH,(CF)=0该例语句“SARBH,CL”实际上完成了(BH)BH的运算,所以,用SAR指令可以实现对有符号数除2n的运算(n为移位次数)。【例】算术右移运算n语句格式:SHR OPD,1或SHR OPD,CLn功能:将(OPD)向右移动C

36、L规定的次数,最高位补入相应个数的,CF的内容为最后移入位的值。3逻辑右移指令SHRn语句格式:ROL OPD,1或ROL LPD,CLn功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动CL规定的次数。CF的内容为最后移入位的值。4循环左移指令ROLn语句格式:ROR OPD,1或ROR OPD,CLn功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动CL规定的次数,CF的内容为最后移入位的值。n 0 7 CF5循环右移指令RORn语句格式:RCL OPD,1或RCL OPD,CLn功能:将目的操作数连同CF标志一起向左循环移动CL规定的次数。6带

37、进位的循环左移指令RCLn语句格式:RCR OPD,1或RCR OD,CLn功能:将目的操作数连同CF标志一起向右循环移动所规定的次数。7带进位的循环右移指令RCR3.4 字符设备I/O功能调用n 本节主要介绍DOS子程序调用方式、键盘输入、屏幕显示和打印机输出的DOS系统功能调用。DOS子程序调用方式n调用之前:设置子程序的入口参数。n调用请求:执行“INT 21H”软中断指令调用。n调用之后:可能有出口参数,也可能无出口参数。如果有出口参数,可根据程序需要,判断本次调用是否成功或者分析执行情况。1 从键盘输入一个字符AH=01H 从键盘读入一个字符,送到显示器输出,并将该字符的ASCII码

38、值AL(出口参数);如果检测到读入的字符是CtrlBreak,则中止程序执行。例:nMOV AH,H n键盘输入子程序,功能1-AH INT 21H DOS子程序调用,等待键入一个字符调用后,输入字符的ASCII码值-AL2、显示输出一个字符AH=02Hn将DL寄存器重的字符(ASCII码值)送到标准输出设备上输出。若检测到CtrlBreak间,则执行中断“INT 23H”中止程序的执行。例:nMOV DL,AL;AL内容是字符的ASCII码-DL MOV AH,2 ;功能号2-AH INT 21H ;调用显示一个字符3.打印机输出一个字符AH=05Hn将要打印的字符DL,然后调用就可以打印输

39、出。如果有标准打印设备不输出,可在执行时用DOS命令键CtrlBreak进行帮助。例:nMOV DL,AL;AL的字符ASCII码-DL MOV AH,5 ;功能号5-AH INT 21H ;调用打印一个字符4、直接控制台输入AH=07Hn输入时不回显,例如,从键盘输入一个字符,在屏幕上不显示,出口参数AL键入的字符。可用来设置保密口令。例:PASSWORD DB 10DUP(0).MOV CX,6 MOV SI,0 AGAIN:MOV AH,7 INT 21H MOV PASSWORDSI,AL MOV DL,*MOV AH,2 INT 21H INC SI LOOP AGAIN5、显示输出

40、字符串AH=09H例:执行下语句后屏幕显示输出“WELCOME!”STRING DB WELCOME!,13,10,$MOV AX,SEG STRING MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H6、缓冲区键盘输入AH=0AHn如果需要键入最大的字符数位N,则由“DS:DX”指向的缓冲区可分为3个字段。n第一个字段:定义缓冲区可存放的字符数N+1,使机器自动控制检查,若键入实际的字符数个数超过N,则响铃报警。n第二个字段:定义缓冲区,当键盘输入调用退出后,系统自动计数并存放实际输入的字符。n第三个字段:定义可存放字符的缓冲区,调用退出后,存放实际输入的字符

41、,最后一个字节总是回车符。0AH调用示例n例:编写在实地址方式(.586与USE16)下,定义一个能最多可输入20个字符到BUF缓冲区的程序。.586STACK SEGMENT USE16 ;定义16位段 DB 256 DUP(0)STACK ENDSDATAS SEGMENT USE16N EQU 20BUF DB N+1 ;定义第一个字段,BUF位21COUNT DB 0 ;定义第二个字段CHAR DB N+1 DUP(0);定义第三个字段PROMPT DB Please input:,13,10,$DATAS ENDS0AH调用示例(续)CODES SEGMENT USE16 ASSUME CS:CODES,DS:DATASSTART:MOV AX,DATAS MOV DS,AX LEA DX,prompt ;取prompt的偏移地址dx MOV AH,9 INT 21H LEA DX,BUF ;取BUF的偏移地址dx MOV AH,0AH INT 21H MOV AH,4CH INT 21HCODES ENDS END START7、返回DOS调用AH=4CHn功能:返回DOSn入口参数:AH=4CH,AL=返回码n出口参数:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁