这个sub补码运算溢出判断是16位的,那这怎么判断cf sf of呢?

当前位置: >>
第3章 16位32位微处理器指令系统
第3章 16位/32位微处理器指令系统指令:要求计算机执行各种特定操作的命令。 ?指令系统:微机能够识别和执行的全部指令集合。 ?不同的微处理器所对应的指令系统也不相同。?3.1 3.2 3.3 3.4指令的基本格式 的寻址方式 的指令系统 80386的寻址方式和指令系统 自学3.5Pentium新增加的指令 作业 3.1 指令的基本格式3.1.1 指令的构成 3.1.2 的指令格式 3.1.1 指令的构成??包括两部分: ? 操作码:表示操作性质或类型编码 ? 操作数:操作对象。 一般来说,第一字节表示操作码,第二字节表示 寻址方式,第三、四字节表示操作数在内存的位 移量或者是立即数(在指令中没有位移量时),第 五、六字节表示立即数。 指令、数据在存储器中的存放 3.1.2 的指令格式基本格式: [标号:] 操作码助记符 目的操作数,源操作数 [;注释] ? 标号:为该条指令所在内存单元的符号地址,后面要跟冒号。 标号一般由字母开头,后跟字母、数字或特殊字符,不允许 使用保留字。 ? 操作码助记符:指示CPU执行什么样的操作。 ? 操作数:分目的操作数和源操作数两种。目的操作数是指令 结果存放的位Z,源操作数是指令操作的对象。 ? 注释:说明本条指令或一段程序的功能,使程序可读性强。 汇编程序对其不进行处理。 3.2 的寻址方式操作数的寻址方式就是指寻找操作数位Z的方式。1 2 3 4 5 6 7立即寻址 寄存器寻址 直接寻址寄存器间接寻址基址寻址和变址寻址存储器寻址基址变址寻址固定寻址思考题 1.立即寻址?操作数包含在指令中,这种操作数称为立即数 ? 可以是8位数值(00H~FFH) ? 也可以是16位数值(0000H~FFFFH)?MOV AL,80H;将80H送入AL MOV AX,306AH;将306AH送入AX立即数寻址方式常用来给寄存器和存储单元赋值。 操作数直接在指令中取得,不需要使用另外的总线 周期,执行时间短、速度快。? ? 2.寄存器寻址???操作数在CPU的内部寄存器中: ? 8位寄存器: AH、AL、BH、BL、CH、CL、DH、DL ? 16位寄存器: AX、BX、CX、DX、SI、DI、BP、SP ? 4个段寄存器: CS、DS、SS、ES MOV AL,BL;将BL的内容传送到AL中 MOV BX,AX;将AX的内容传送到BX中 采用寄存器寻址的指令在执行时,操作数就在CPU中,不需 要访问存储器来取得操作数,执行速度快。另外寄存器名比 内存地址短,指令所占内存空间少。 3.直接寻址有效地址EA (Effective Address):操作数的偏移地址。 ?EA可通过不同的寻址方式来得到。 ?直接寻址方式的有效地址在指令中直接给出。 ?默认的段基址在DS段寄存器,可使用段前缀改变。 ?用方括号包含有效地址,如:MOV AX,[1000H]。 例子 ?如果有效地址是以符号地址形式提供,则可不加方括号。 MOV AX,BUFA;BUFA为符号地址,这时不加跨段前 缀,默认仍为DS数据段。如BUFA变量 在附加段中,就必须书写为: MOV AX,ES:BUFA? 例子已知: (DS)=2000H ,(21000H)=12H, (21001H)=34H。 试给出指令 MOV AX,[1000H]执行后AX的内容。数据段 段基址:2000H 有效地址:H物理地址:21000H2H 2FFFFH12H 34HAX指令执行后,(AX)=3412H。存储器 4.寄存器间接寻址? ? ? ? ???有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中。 如用BX、SI或DI作为间址寄存器,则默认的段基址在DS段寄存器。 如用BP作为间址寄存器,则默认的段基址在SS段寄存器。 可使用段前缀改变。 MOV AX,[BX] ;若(DS)=2000H,(BX)=1000H ,则将数据段 21000H、21001H两个单元的内容送到AX中。 MOV CX,[BP] ;若 (SS)=4000H,(BP)=1000H ,则将堆栈段 41000H、41001H两个单元的内容送到CX中。 MOV AX,ES:[SI] ;若(ES)=3000H,(SI)=1000H ,则将附加段 31000H、31001H两个单元的内容送到AX中。 5.基址寻址和变址寻址??有效地址是寄存器内容与有符号8位或16位位 移量之和,寄存器可以是BX、BP或SI、DI。 有效地址=BX/BP/SI/DI+8/16位位移量 ?如果寄存器为BX或BP,则为基址寻址 ?如果寄存器为SI或DI,则为变址寻址 段基址对应BX/SI/DI寄存器默认是DS,对应 BP寄存器默认是SS;可用段前缀改变。例子 例子已知: (DS)=4000H , (SI)=2000H, 内存单元 (45000H)=34H, (45001H)=12H。 试给出指令 MOV AX,[SI+3000H]执行后AX的内容。 数据段 段基址:4000H 有效地址:H物理地址:45000H4H 4FFFFH34H 12HAX指令执行后,(AX)=1234H。存储器 6.基址变址寻址??? ?有效地址由基址寄存器(BX或BP)的内容加上变 址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI +8/16位位移量 段基址对应BX寄存器默认是DS,对应BP寄存器默 认是SS;可用段前缀改变。 该寻址方式适用于数组或表格存取。 MOV AX,8[BX+SI] ;默认操作数在数据段中 MOV BX,-6[BP+DI];默认操作数在堆栈段中 MOV BX,ES:[BP+DI] ;操作数在附加段中 7.固定寻址? ???固定寻址又叫隐含寻址。 指令码中不包含指明操作数地址的部分,而 其操码本身隐含地指明了操作数地址。 如:十进制调整指令DAA,该指令的功能是 对AL寄存器中的内容进行十进制调整,调整 后的内容仍存放到AL中。 隐含寻址的指令,不需要计算EA,执行速度 快,而且大多为单字节指令。 思考题8086指令MOV AX,1234H,该指令源操作数 的寻址方式为 。A.立即寻址 C.直接寻址 B.寄存器寻址 D.寄存器间址答案:A 思考题使用直接寻址方式时,操作数总是在A.通用寄存器 B.堆栈中。C.主存单元D.段寄存器答案:C 思考题寄存器间接寻址方式中,操作数在 A.通用寄存器 B.堆栈 C.主存单元 D.段寄存器答案:C中。 思考题8086指令MOV AX,[BX],该指令源操作数的 寻址方式为 。 A.立即寻址 B.寄存器寻址 C.直接寻址 D.寄存器间址答案:D 思考题8086指令MOV AX,[3000H],该指令源操作数 的寻址方式为 。 A.立即寻址 B.寄存器寻址 C.直接寻址 D.寄存器间址答案:C 思考题8086在基址加变址的寻址方式中,基址寄存器 可以为 ,变址寄存器可以为SI或DI。 A.AX或CX B.BX或BP C.SI或BX D.DX或DI答案:B 思考题8086CPU在基址加变址的寻址方式中,基址寄 存器可以为BX或BP,变址寄存器可以为 。 A.AX或CX B.BX或BP C.SI或BX D.SI或DI答案:D 思考题可用于寄存器间接寻址的寄存器有 个。 A.1 B.2 C.3 D.4答案:D 思考题采用寄存器间接寻址时,存储单元的有效地址 由寄存器指出,这些寄存器为 。 A.AX,BX,CX,DX B.CS,ES,DS,SS C.BX,BP,SI,DI D.SP,BP,SI,DI答案:C 思考题如果以BP寄存器对操作数进行间接寻址,则操 作数默认在 。 A.代码段 B.数据段 C.堆栈段 D.扩展段答案:C 思考题如果以BX寄存器对操作数进行间接寻址,则操 作数默认在 。 A.代码段 B.数据段 C.堆栈段 D.扩展段答案:B 思考题MOV AX,ES:[BX][SI]的源操作数的物理地 址是 。 A.16×(DS)+(BX)+(SI) B.16×(ES)+(BX)+(SI) C.16×(SS)+(BX)+(SI) D.16×(CS)+(BX)+(SI)答案:B 思考题(DS)=2000H , (SS)=1500H , (ES)=3200H , (SI)=00A0H , (BX)=0100H,(BP)=0010H,数据段中的变量名VAL(偏移量) 值为50H,指出下列各条指令中源操作数的寻址方式是什么? 对存储器操作,其物理地址是多少? (1)MOV AX,[100H] (2)MOV AX,ES:[BX] (3)MOV AX,[BP] (4)MOV AX,VAL[SI] (5)MOV AX,[BX][SI] (6)MOV AX,VAL[BX][SI] 3.3 的指令系统符号的约定:? ?OPD :目的操作数(8/16位) OPS :源操作数(8/16位)3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6数据传送类指令 算术运算类指令 逻辑运算与移位类指令 串操作类指令 控制转移类指令 处理器控制类指令 3.3.1 数据传送类指令??数据传送是计算机中最基本、最重要的一种 操作,传送指令也是最常使用的一类指令。 除标志寄存器传送指令外,均不影响标志位。12通用数据传送指令标志寄存器传送指令34目标地址传送指令 输入/输出指令 1.通用数据传送指令★ MOV传送指令★ XCHG交换指令 ★ XLAT换码指令 ★ 堆栈操作指令 1) MOV传送指令? ?????格式: MOV OPD,OPS MOV指令是使用最多的指令,它可以完成CPU内寄存器之间、 寄存器与存储器之间的数据传送,还可以将立即数送入寄存 器或内存。 MOV AL,BL;将寄存器BL的内容传送到寄存器AL中。 MOV [DI], AX;将寄存器AX的内容传送到DI和DI+1所 指的内存字单元中。 MOV CX,[1000H];将数据段中偏移地址1000H和1001H 单元的内容送CX中。 MOV BL,40;将立即数40传送到寄存器BL。注意思考题 注意? ? ? ? ?立即数、CS和IP不能作为目的操作数。 两个段寄存器之间不能相互传送数据。 两个存储单元之间不能直接传送。 不能将立即数直接传送到段寄存器。 两个操作数的类型和长度必须一致。 思考题指出下列指令的错误所在。 ? MOV BX,AL ? MOV 100,CL ? MOV SS,2400H ? MOV [BX],[SI] ? MOV AX,[SI][DI] ? MOV MEM[BX],ES:AX ? MOV AL,[CX] ? MOV CS,AX 思考题假设V1和V2是用DW定义的变量,下列指令中正确 的是 。A.MOV V1,V2 B.MOV V1,20HC.MOV 2000H,V2D.MOV AL,V1 答案:B 思考题下列指令中,格式正确的是 。A.MOV DX,[AX+BX]B.MOV AX,[SI+DI]C.MOV CX,[BP+BX]D.MOV AX,[SI+BP]答案:D 思考题设(20010H)=3FH,(20011H)=B2H,则执行下列指 令后BX= 。 MOV AX,2000H MOV DS,AX MOV BX,[0010H] A.3FB2H B.B23FH C.3F3FH D.B2B2H答案:B 思考题下面格式不正确的指令是 A.MOV AX,38 C.MOV DS,38 。 B.MOV SP,38 D.MOV AL,38 答案:C 思考题设M/IO,WR,RD在某时刻分别为1,0,1时,在下 列指令中与其对应的是 。 A.MOV AX,[BX+10] C.MOV ES:[DI],AX B.IN AL,110 D.OUT 40H,AL答案:C 2) XCHG交换指令? ? ??格式:XCHG OPD,OPS 操作数的类型可以为字节或字。 交换只能在通用寄存器之间、通用寄存器 与存储器之间进行。 XCHG AX,BX;AX和BX的内容互换 3) XLAT换码指令格式: XLAT 或 XLAT 表首址 ?功能:使AL中的值变换为内存表格中的对应值。 ?它是一条隐含寻址方式的指令。 ?将数据段内有效地址为(BX)+(AL)的内存字节单 元中数据送入AL。 ?该指令常用来查表,即将表头地址赋予BX,再 将需求的表内位移地址赋予AL,最后运用XLAT 指令即可以将该地址处的表值送到AL。?功能图 XLAT换码指令的功能图数据段 BX +AL 表ALBX+AL存储器 4)PUSH入栈指令与POP出栈指令??堆栈是一个?后进先出LIFO”(或说?先进 后出FILO”)的主存区域,位于堆栈段中; SS段寄存器记录其段基址。 堆栈的存取操作都发生在栈顶;用堆栈指 针寄存器SP指定。★ 入栈指令PUSH ★ 出栈指令POP 思考题 入栈指令PUSH? ?? ? ?格式:PUSH OPS 功能:修改指针:(SP)-2→SP;将OPS指定 的寄存器、段寄存器或存储器中的一个字数 据压入堆栈的顶部。 例子 PUSH指令在使用时应该注意: 源操作数只能是16位,而不能是8位的。 源操作数不能为立即数。 PUSH指令的例子例:假设在指令执行前,(SP)=1000H;(AX)= 1234H。试分析PUSH AX指令的执行结果。堆栈段SP SP①0FFEH 0FFFH 1000H34H 12H②AX存储器 出栈指令POP? ?? ? ?格式:POP OPD 功能:将栈顶的一个字数据送至OPD指明的 寄存器、段寄存器(CS除外)或存储器中;修 改指针:(SP)+2→SP。 例子 POP指令在使用时应该注意: 目的操作数只能是16位,而不能是8位的。 立即数、CS不能作为目的操作数。 POP指令的例子例:假设在指令执行前,(SP)=0FFEH,(BX)=2004H, 并且堆栈段栈顶(0FFEH)单元内存放34H,(0FFFH)单 元内存放12H。试分析POP BX指令的执行结果。堆栈段SP SP ②0FFEH 34H 0FFFH 12H 1000H 存储器①BX =1234H 思考题设当前SP中为0400H,在执行了PUSH DS,PUSH AX两条指令后,SP中为 。A.0402H B.0404HC.03FEHD.03FCH答案:D 思考题设(SP)=0100H,(SS)=2000H,执行PUSH BP指令 后,栈顶的物理地址是 。 A.200FEH C.20102H B.0102H D.00FEH答案:A 思考题假定(SS)=2000H,(SP)=0100H,(AX)=2107H,执行 指令PUSH AX后,存放数据21H的物理地址是 。 A.20102H C.200FEH B.20101H D.200FFH答案:D 思考题设(SP)=2800H,使(SP)=27FEH的正确指令是 A.NEG A C.POP AX B.MOV SP,27FEH D.MOV [SP],27FEH 。答案:B 思考题若寄存器AX、BX、CX、DX的内容分别为0018H, 0019H,0020H,0021H时,依次执行PUSH AX, PUSH BX,POP CX,POP DX后,寄存器CX的内 容为 。A.0018HC.0020HB.0019HD.0021H 答案:B 思考题若用户堆栈位于存储区10000H-1FFFFH,则该堆 栈的段地址是 。A.10000HC.1000HB.1FFFFHD.0FFFH 答案:C 2.标志寄存器传送指令????LAHF指令:取标志寄存器指令。将标志寄 存器FR的低8位传送到AH中。 SAHF指令:设Z标志寄存器指令。将AH的 内容传送到标志寄存器FR的低8位。 PUSHF指令:将标志寄存器FR的值压入堆 栈。 POPF指令:从堆栈中弹出一个字到标志寄 存器FR中。 3.目标地址传送指令★ 取偏移地址指令LEA★ 传送偏移地址及数据段首址指令LDS★ 传送偏移地址及附加段首址指令LES 思考题 1)取偏移地址指令LEA?? ?格式:LEA OPD,OPS功能:将源操作数的偏移地址送到目的操作数。 该指令不影响标志位,源操作数必须是存储器操作 数,目的操作数必须是16位通用寄存器。 LEA SI,TABLE;TABLE为存储器操作数的符号地 址 LEA AX,[SI];该指令等效于MOV AX,SI指令, 与MOV AX,[SI] 指令的效果不同,注意区别。?? 2)传送偏移地址及数据段首址指令LDS??格式:LDSOPD,OPS?功能:从源操作数所指定的存储单元中取 出某变量的地址指针(共4个字节),将低地 址两个字节(偏移量)送到目的操作数,将高 地址两个字节(段首址)送到DS中。 例子 该指令对标志位不影响,源操作数是双字 类型存储器操作数,目的操作数必须是16 位通用寄存器。 LDS指令的例子设某双字存储单元的偏移地址为3000H,双字 数据为H,试分析LDS SI,[3000H]指 令的执行结果。数据段 H H 78H 56H 34H 12H SI =5678H DS =1234H存储器 3)传送偏移地址及附加段首址指令LES? ?格式:LES OPD,OPS 功能:从源操作数所指定的存储单元取出 某变量的地址指针(共4个字节),将低地址 两个字节(偏移量)送到目的操作数,将高地 址两个字节(变量的段首址)送到ES中。 思考题假定(DS)=4000H,(42728H)=55H,(42729H)=AAH, 执行命令LEA BX,[2728H]后,BX中的内容是 。A.AA55HC.2728HB.55AAHD.4000H答案:C 思考题假定(DS)=4000H,(DI)=0100H,(40100H)=55H, (40101H)=AAH,执行命令LEA BX,[DI]后,BX 中的内容是 。 A.AA55H B.55AAHC.0100HD.4100H答案:C 4.输入输出指令输入/输出指令用于完成输入/输出端口与累加 器(AL/AX)之间的数据传送,指令中给出输入 /输出端口的地址。★ 输入指令IN★ 输出指令OUT★ 注意事项 1)输入指令IN??格式:IN OPD,OPS功能:从端口(地址为n或在DX中)输入8位数据到 AL或输入16位数据到AX。 IN AL,40H;从40H端口读入一个字节送AL IN AX,80H;从80H端口读入一个字节送AL,从 81H端口读入一个字节送AH MOV DX , 8F00H ; 将 端 口 地 址 8F00H 送 DX IN AL,DX;从8F00H端口读入一个字节送AL? ?? 2)输出指令OUT??格式:OUT OPD,OPS功能:从AL输出8位数据或从AX输出16位数 据到端口(地址为n或在DX中)。 OUT 40H,AL;将AL内容送40H端口 OUT 80H,AX;将AL内容送80H端口, 将AH的内容送81H端口 MOV DX,8F00H;将端口地址8F00H送DX OUT DX,AL;将AL内容送8F00H端口? ?? 输入/输出指令在使用时应该注意? ?输入/输出指令对标志寄存器没有影响。 端口地址大于255时,必须用DX指定端口地 址。 3.3.2 算术运算类指令可以完成带符号和不带符号的8位/16位二进制的算术运算, 以及BCD码表示的十进制数的算术运算。 ?分为:?1 2 3 4 5 6加法指令 减法指令 乘法指令 符号扩展指令 除运算指令 十进制调整指令 1.加法指令★ 不带进位加法指令ADD★ 带进位加法指令ADC ★ 加1指令INC 思考题 1)不带进位加法指令ADD? ? ?格式:ADD OPD,OPS 功能:OPS+OPD? OPD。 影响标志位CF、AF、PF、SF、OF和ZF。 2)带进位加法指令ADC? ? ? ?格式:ADC OPD,OPS 功能:OPS+OPD+CF ? OPD。 影响标志位CF、AF、PF、SF、OF和ZF。 ADC指令常用于多字的加法。 3)加1指令? ? ? ? ???格式:INC OPD 功能:将目的操作数OPD的内容加1,并将结果回 送到目的操作数。 影响标志位AF、PF、SF、OF和ZF,但不影响CF标 志。 INC AX;AX中内容加1,结果送回AX INC BL;BL中内容加1,结果送回BL INC BYTE PTR [SI] ;将SI所指内存字节单元内容 加1,并回存。 主要用于计数器的计数或修改地址指针。 思考题设AX=C544H,在执行指令ADD AH,AL后, 。A.CF=0,OF=0C.CF=1,OF=0B.CF=0,OF=1D.CF=1,OF=1 答案:C 2.减法指令★ 不带借位的减法指令SUB ★ 带借位的减法指令SBB ★ 减1指令DEC ★ 比较指令CMP ★ 求补指令NEG思考题 1)不带借位的减法指令SUB? ? ? ?格式:SUB OPD,OPS 功能:OPD-OPS? OPD 结果影响标志位CF、AF、PF、SF、OF和ZF。 SUB BX,CX;BX的内容减去CX的内容, 结果放入BX 2)带借位的减法指令SBB? ? ? ?格式:SBB OPD,OPS 功能:OPD-OPS-CF?OPD 结果影响标志位CF、AF、PF、SF、OF和ZF。 SBB [SI],AL;SI所指字节单元内容减AL的 值,再减CF,结果存回原内 存单元。 3)减1指令DEC? ??? ?格式:DEC OPD 功能:将目的操作数OPD的内容减1,并将 结果回送到目的操作数。 影响标志位AF、PF、SF、OF和ZF,但不影 响CF标志。 DEC AX;AX的内容减1,结果送回AX。 DEC CL;CL的内容减1,结果送回CL。 4)比较指令CMP? ????? ??格式:CMP OPD,OPS 功能:目的操作数OPD减去源操作数OPS,结果不回送。但 影响标志位CF、AF、PF、SF、OF和ZF。 CMP AL,09H;将AL的内容和09H比较,结果影响标志位 可以根据标志位的变化,来判断比较结果。 通过ZF的值来判断两数是否相等。若ZF=1,说明两数相等; 否则,两数不等。 通过CF、OF和SF的变化来判断无符号数或有符号数的大小: 对于无符号数,如CF=0,则目的操作数比源操作数大;如 CF=1,则目的操作数比源操作数小。 对于有符号数,如OF=SF,则目的操作数比源操作数大;如 OF≠SF,则目的操作数比源操作数小。 5)求补指令NEG? ????格式:NEG OPD 功能:由目的操作数OPD求补,将其结果送 回目的操作数。实际做0-OPD?OPD运算。 影响标志位CF、AF、PF、SF、OF和ZF。 MOV AL,05H NEG AL;(AL)=0FBH,CF=1 MOV AL,-05H NEG AL;(AL)=05H,CF=1 思考题若(AX)=2891H,问执行 NEG AX指令后,CF和 SF标 志位的状态分别是 。A.0和0C.1和0B.0和1D.1和1 答案:D 思考题CMP指令和 指令执行同样的操作,但不送回操作 结果,而仅仅影响标志位。 A.ADD C.SUB B.ADC D.SBB 答案:C 思考题INC指令不影响 A.OF B.CF 标志。 C.ZF D.SF答案:B 思考题若(AX)=0122H,四个标志位CF、SF、ZF、OF的初始状态 为0,执行指令SUB AX,0FFFH后,这四个标志位的状态 是 。 A.CF=1,SF=1,ZF=1,OF=1 B.CF=1,SF=1,ZF=0,OF=0 C.CF=0,SF=0,ZF=0,OF=0D.CF=0,SF=0,ZF=1,OF=1答案:B 3.乘法指令★ 无符号数乘法指令MUL ★ 有符号数乘法指令IMUL 1)无符号数乘法指令MUL? ?格式: MUL OPS 功能: 字节乘法: (AL)×(OPS)→AX 字乘法: (AX)×(OPS)→(DX,AX)图示 图示MUL指令在使用时应该注意: ? OPS不能是立即数。 ? MUL指令只影响CF、OF标志: ? 对于字节乘法,若AH≠0,则CF=1,OF=1;否则CF=0,OF=0。 ? 对于字乘法,若DX≠0,则CF=1,OF=1;否则CF=0,OF=0。 2)有符号数乘法指令IMUL? ??格式:IMUL OPS 功能:字节乘法: (AL)×(OPS)→AX 字乘法: (AX)×(OPS)→(DX,AX) IMUL指令的使用注意事项同MUL指令。 4.符号扩展指令★ 将字节扩展为字指令CBW ★ 将字扩展为双字指令CWD 1)将字节扩展为字指令CBW? ???格式:CBW 功能:将AL的内容从字节扩展为字,存放到 AX。 若AL中数据的最高位为0,则(AH)=00H; 若AL中数据的最高位为1,则(AH)=0FFH。 该指令不影响标志位。 2)将字扩展为双字指令CWD? ???格式:CWD 功能:将AX的内容从字扩展为双字,存放到 DX、AX。 若AX中数据的最高位为0,则(DX)=0000H; 若AX中数据的最高位为1,则(DX)=0FFFFH。 该指令不影响标志位。 5.除运算指令★ 无符号数除法指令DIV ★ 有符号数除法指令IDIV思考题 1)无符号数除法指令DIV? ?格式:DIV OPS 功能: 字节除法:(AX)/(OPS)→AL(商),AH(余数) 字除法: (DX,AX)/ (OPS)→AX(商),DX(余数)图示 图示DIV指令在使用应该注意: ? OPS不能是立即数。 ? 除法指令不影响标志位,除0会导致结果溢出,产生 溢出中断。 2)有符号数除法指令IDIV? ?格式:IDIV OPS 功能: 字节除法: (AX)/(OPS)→AL(商),AH(余数) 字除法: (DX,AX)/ (OPS)→AX(商),DX(余数) 思考题8086执行乘法指令,当得到16位乘积时,结果在 中。A.AXB.BXC.CXD.DX答案:A 思考题8086执行乘法指令,当得到32位乘积时,结果的高 16位在 中。 A.AX B.BX C.CX D.DX 答案:D 思考题8086执行除法指令时,当被除数为16位,则除数为 位。 A.8 B.16 C.32 D.64 答案:A 思考题8086执行除法指令时,当被除数为32位,则除数为 位。A.8 B.16 C.32 D.64答案:B 6.十进制调整指令??前面的算术运算指令都是二进制运算指令,如何利 用它们来进行BCD 码十进制运算? 一般方法是:首先对BCD码表示的十进制数进行二 进制运算,然后再使用调整指令对运算结果进行调 整,得出正确的BCD码表示的十进制运算结果。 ★ 加法的BCD码调整指令★ 减法的BCD码调整指令★ 乘法的非压缩BCD码调整指令AAM ★ 除法的非压缩BCD码调整指令AAD 1)加法的BCD码调整指令★ 压缩BCD码调整指令DAA ★ 非压缩BCD码调整指令AAA思考题 (1)压缩BCD码调整指令DAA? ? ??格式:DAA 功能:将AL中二进制加法运算的结果调整为两位压缩BCD码,结果仍保 留在AL中。 调整的方法:若AL的低4位大于9,则AL的内容加06H, 并AF位Z1; 若AL的高4位大于9,则AL的内容加60H, 并CF位Z1; 若 AF=1,则低4位要加6; 若 CF=1,则高4位要加6。
例如:MOV BL,34H MOV AL,56H +
ADD AL,BL
DAA + 0110 上述指令序列执行后,(AL)=90H ,CF=0,AF=0。 (2)非压缩BCD码调整指令AAA? ?????格式: AAA 功能:将AL中二进制加法运算结果调整为一位非压缩BCD码, 调 整 后 的 结 果 仍 保 留 在 AL 中 , 如 果 向 高 位 有 进 位 (AF=1,CF=1),则AH的内容加1。 调整的方法:若AL的低4位大于9或AF=1,则自动将AL的内 容加06H,AH内容加1并ZAF=CF=1,将AL的高4位清零; 若AL的低4位小于或等于 9,则仅将AL的高4位清零,并 AF→CF。 DAA、AAA指令在使用时应该注意: DAA、AAA指令一般是紧跟在ADD或ADC指令后使用,单 独使用没有意义。 调整指令只对AL的内容进行调整,故在调整前,务必保证待 调整结果出现在AL。 例子假设(AL)=08H,(BL)=07H,则下述程序执行后, (AH)=01H,(AL)=05H,CF=1。 ADD AL,BL AAA 思考题假定(AL)=96H,(BL)=65H,依次执行ADD AL,BL 指令和DAA指令后, (AL)= 。A.0FBH B.01H C.61H D.0BH答案:C 2)减法的BCD码调整指令★ 压缩BCD码调整指令DAS ★ 非压缩BCD码调整指令AAS (1)压缩BCD码调整指令DAS? ??格式:DAS 功能:将AL中二进制减法运算的结果调整为 两位压缩BCD码,结果仍保留在AL中。 调整的方法:若 AF=1或AL的低4位大于9, 则自动(AL)-06H→AL,1→AF;若 CF=1或 AL的高4位大于9,则自动(AL)-60H→AL, 1→CF。 (2)非压缩BCD码调整指令AAS? ???格式:AAS 功能:将AL 中二进制减法运算结果调整为一位非压 缩BCD码,如果有借位,则保留在CF中。 调整的方法:若AL的低4位大于9或AF=1,则自动 将AL的内容减06H,AH内容减1并ZAF=CF=1,将 AL的高4位清零;若AL的低4位小于或等于9,则仅 将AL的高4位清零,并AF→CF。 DAS、AAS指令在使用时的注意事项可参考加法调 整指令。 3)乘法的非压缩BCD码调整指令AAM? ??格式:AAM 功能:将AL中二进制乘法运算结果调整为两 位非压缩BCD码,高位放在AH,低位放在 AL。影响标志位PF、SF和ZF。 该指令必须紧跟在MUL之后,且被乘数和乘 数必须用非压缩的BCD码表示。 4)除法的非压缩BCD码调整指令AAD格式:AAD ? 功能:用在两位非压缩的BCD码相除之 前,将AX内容调整为二进制数。? 3.3.3 逻辑运算与移位类指令1 2 3 逻辑运算指令 移位指令 循环移位指令 1.逻辑运算指令可以对字或字节按位进行逻辑运算。★ 非运算指令NOT ★ 与运算指令AND ★ 测试指令TEST★ 或运算指令OR ★ 异或运算指令XOR思考题 1)非运算指令NOT? ??格式:NOT OPD 功能:将目的操作数的内容按位取反后,再 送回目的操作数。 该指令不影响标志位。 2)与运算指令AND? ??格式:AND OPD,OPS 功能:将目的操作数的内容与源操作数按位 相与,结果送回目的操作数。 影响标志位SF、ZF、PF,使OF=0,CF=0, 对AF无定义。 3)测试指令TEST? ? ? ??格式:TEST OPD,OPS 功能:将目的操作数的内容与源操作数按位相与, 但结果不送回目的操作数。 影响标志位SF、ZF、PF,使OF=0,CF=0,对AF无 定义。 例子: TEST AL,80H 执行前:(AL) =39H 执行后: ZF=1 该指令可以用于判断目的操作数的某个数位是否1。 上例中可以根据ZF=1,判断出AL内容的最高位为零。 4)或运算指令OR? ??格式:OR OPD,OPS 功能:将目的操作数的内容与源操作数按位 相或,结果送回目的操作数。影响标志位SF、 ZF、PF,使OF=0,CF=0,对AF无定义。 该指令常用来将目的操作数的某一位或几位 Z1。 5)异或运算指令XOR? ??格式:XOR OPD,OPS 功能:将目的操作数的内容与源操作数按位 异或,结果送回目的操作数。影响标志位SF、 ZF、PF,使OF=0,CF=0,对AF无定义。 由于某个操作数和同一个数异或结果为0,故 异或运算常被用来比较两数是否相等或初始 化某数为0。 思考题TEST指令和 指令执行同样的操作,但不送回操 作结果,而仅仅影响标志位。 A.AND C.NOT B.OR D.XOR 答案:A 思考题假 设 (AX)=0FF60H , 则 下 述 程 序 段 执 行 后 , (AX)=0,CF=0。 STC MOV DX,96 XOR DH,0FFH SBB AX,DX 思考题下列四条指令都可用来使AL清‘0’,但其中不能清 ‘进位’位的是 。A.XOR AL,ALC.MOV AL,0B.AND AL,0D.SUB AL,AL 答案:C 思考题下列8086指令中,对AX的结果与其他三条指令不同 的是 。 A.MOV AX,0 C.SUB AX,AX B.XOR AX,AX D.OR AX,0 答案:D 思考题设(AX)=ABDFH,则在执行指令 AND AX,0001H后,AX寄存器的内容为 。A.ABDEHC.0001HB.FFFFHD.0000H 答案:C 思考题设(AX)=ABDFH,则在执行指令 AND AX,8000H后,AX寄存器的内容为 A.ABDEH C.1000H B.FFFFH D.8000H。答案:D 思考题设(AX)=ABDFH,则在执行指令 OR AX,0001H后,AX寄存器的内容为 A.ABE0H C.0001H B.FFFFH D.ABDFH 答案:D。 思考题若(AL)=B,为了使其内容变为B, 下列 指令执行一次即可完成此操作。A.NOT指令 B.OR指令C.AND指令D.XOR指令答案:D 2.移位指令??这组指令可以对字节或字中的各位进行算术 移位和逻辑移位。 移位次数可以是1也可以大于1。若移位次 数大于1时,必须将次数预先放入CL。★ 算术左移指令SAL ★ 逻辑左移指令SHL ★ 算术右移指令SAR★ 逻辑右移指令SHR 1)算术左移指令SAL? ??格式:SAL OPD,OPS 功能:根据源操作数OPS中的移位次数,将 目的操作数的内容连续进行左移操作,每次 高位进入CF,最低位补0 。 无符号数的算术左移一位相当于目的操作数 乘2。 图3.2 2)逻辑左移指令SHL? ?格式:SHL OPD,OPS 功能:与算术左移指令SAL完全相同。 3)算术右移指令SAR? ?格式:SAR OPD,OPS 功能:根据源操作数OPS中的移位次数,将 目的操作数的内容连续进行右移操作,每次 低位进入CF,最高位用移位前的值填补 。图3.2 4)逻辑右移指令SHR? ?格式:SHR OPD,OPS 功能:根据源操作数OPS中的移位次数,将 目的操作数的内容连续进行右移操作,每次 低位进入CF,最高位补0 。图3.2 图3.2 移位指令操作过程 3.循环移位指令? ?循环移位次数的设Z和移位指令相同。 这组指令只影响CF、OF标志位。★ 循环左移指令ROL ★ 循环右移指令ROR ★ 带进位的循环左移指令RCL ★ 带进位的循环右移指令RCR 1)循环左移指令ROL? ?格式:ROL OPD,OPS 功能:根据源操作数OPS中的移位次数,将 目的操作数的内容连续进行循环左移操作。图3.3 2)循环右移指令ROR? ?格式:ROR OPD,OPS 功能:根据源操作数OPS中的移位次数,将 目的操作数的内容连续进行循环右移操作。图3.3 3)带进位的循环左移指令RCL? ?格式:RCL OPD,OPS 功能:根据源操作数OPS中的移位次数,连 续对目的操作数的内容带CF循环左移操作。图3.3 4)带进位的循环右移指令RCR? ?格式: RCR OPD,OPS 功能:根据源操作数OPS中的移位次数,连 续对目的操作数的内容带CF循环右移操作。图3.3 图3.3 循环移位指令的操作过程 3.3.4 串操作类指令01 2 3 4 5概述重复指令前缀 数据字节串/字串传送指令 数据字节串/字串比较指令 数据字节串/字串检索指令 数据字节串/字串读出指令6数据字节串/字串写入指令 0.概述? ? ? ???字符串是指存储器中顺序存放的类型相同的字节或字的序列。 串操作是指对串中每个元素都执行同样的操作。 规定一个字符串的长度最长不能超过64K字节。 源串存放在数据段,用SI提供源串的偏移地址。 目的串存放在附加段,用DI提供目的串的偏移地址。 当方向标志DF=0:地址指针SI、DI自动加1(字节串)或2(字串) 当方向标志DF=1:地址指针SI、DI自动减1(字节串)或2(字串) 串操作指令前不加重复前缀,串操作只执行一次。 如重复执行串操作,可以用CX存放重复的次数,每重复执行 一次,CX内容减1。当CX内容减为0时,串操作停止。 1.重复指令前缀★ 无条件重复前缀REP ★ 相等/为零重复前缀REPE/REPZ★ 不相等/不为零重复前缀REPNE/REPNZ 1)无条件重复前缀REP格式:REP ? 功能:用于一个串操作指令的前缀,每重复执行一 次串操作指令,CX的内容减1,直到(CX)=0 为止。 ? 执行步骤如下: ①先判断CX的内容,如(CX)=0,则串操作停止,否则 执行第②步; ②(CX)-1→CX ; ③执行其后的串操作指令,转第①步。? 2)相等/为零重复前缀REPE/REPZ格式:REPE/REPZ ? 功能:用于一个串操作指令的前缀,每重复执行一 次串操作指令,CX的内容减1,直到(CX)=0 或ZF=0 为止。 ? 执行步骤如下: ①先判断CX的内容,如(CX)=0或ZF=0,则串操作停 止,否则执行第②步; ②(CX)-1→CX ; ③执行其后的串操作指令,转第①步。? 3)不相等/不为零重复前缀REPNE/REPNZ格式:REPNE/REPNZ ? 功能:用于一个串操作指令的前缀,每重复执行一 次串操作指令,CX的内容减1,直到(CX)=0 或ZF=1 为止。 ? 执行步骤如下: ①先判断CX的内容,如(CX)=0或ZF=1,则串操作停 止,否则执行第②步; ②(CX)-1→CX ; ③执行其后的串操作指令,转第①步。? 2.数据字节串/字串传送指令? ??格式:MOVSB/MOVSW 功能:将数据段中由(DS:SI)指向的源串的一个字节 (字)传送到附加段由(ES:DI)指向的目的串中,且相 应修改地址指针,使其指向下一个字节(字)。 例:将内存单元首地址3100H起的100个字节传送到 首地址2800H的内存单元。 CLD MOV SI,3100H MOV DI,2800H MOV CX,100 REP MOVSB 3.数据字节串/字串比较指令? ??格式:CMPSB/CMPSW 功能:将数据段中由(DS:SI)指 向源串的一个字节(字)减去附 加段由(ES:DI)指向的目的串的 一个字节(字),不回送结果, 只根据结果影响标志位,并相 应修改地址指针,使其指向下 一个字节(字)。 例:检查内存单元首地址 2200H起的50个字节与首地址 3200H起的50个字节是否对应 相等 。如相等 ,则BX=0;若 不相等,BX指向第一个不相等 的字节单元。AL存放第一个不 相等的源串内容。CLD MOV SI,2200H MOV DI,3200H MOV CX,50 REPE CMPSB JZ LP1 DEC SI MOV BX,SI MOV AL,[SI] JMP LP2 LP1:MOV BX,0 LP2: 4.数据字节串/字串检索指令??格式:SCASB/SCASW功能:将AL(AX)的内容减去附加段由(ES:DI)指向的目的串的一个字节 (字),不回送结果,只根据结果影响标志位,并相应修改地址指针,使其 指向下一个字节(字)。 例:在内存附加段首地址为4300H起的100个字节中,查找是否有?*?, 如有, 则将偏移地址送BX ,否则BX=0。?CLD MOV DI,4300H MOV AL,‘*’ REPNZ SCASB JNZ LP1 DEC DI MOV BX,DI ;找到?*?,偏移地址送BX JMP LP2 LP1:MOV BX,0 ;未找到 LP2: 5.数据字节串/字串读出指令? ?格式:LODSB/LODSW 功能:将数据段中由(DS:SI)指向源串的一个 字节(字)读出,放入AL(AX)中,并相应修改 地址指针,使其指向下一个字节(字)。 6.数据字节串/字串写入指令? ?格式:STOSB/STOSW 功 能 : 将 AL(AX) 的 内 容 写 入 附 加 段 中 由 (ES:DI)指向的目的串一个字节(字)中,并相 应修改地址指针,使其指向下一个字节(字)。 3.3.5 控制转移类指令? ?控制转移指令用来控制程序的执行流程。 程序执行顺序的改变实际上是通过修改代码 段寄存器CS和指令指针IP的内容来实现的。1 2 3 4 5 无条件转移指令 条件转移指令 循环转移指令 子程序调用和返回指令 中断和中断返回指令思考题 1.无条件转移指令无条件地转移到指令指定的地址去执行从该地 址开始的指令。★ 段内直接短转移 ★ 段内直接转移★ 段内间接转移★ 段间直接转移 ★ 段间间接转移 1)段内直接短转移? ??格式:JMP SHORT 目标标号 功能:无条件地转移到标号所指定的目标地 址去执行程序。 目标地址与JMP指令的下一条指令地址之差 在-128~+127字节之间。 2)段内直接转移??格式:JMP 目标标号 JMP NEAR PTR 目标标号 功能:转移的范围扩大到-3字节 之间。 3)段内间接转移? ??格式:JMP WORD PTR OPD 功能:转移到OPD所指定的目标地址去执行 程序。 OPD只能是16位寄存器或两个连续存储的内 存字节单元。转移范围为64KB。 4)段间直接转移? ??格式:JMP FAR PTR 目标标号 功能:将目标标号所在的段基址送CS,将目 标标号相对所在段的段内偏移地址送IP。 可以转移范围为1MB。 5)段间间接转移? ??格式:JMP DWORD PTR OPD 功能:目的操作数为双字,将目的操作数的 第一个字送IP,将目的操作数的第二个字送 CS。 可以转移范围为1MB。 2.条件转移指令? ?满足条件,则转移,不满足条件则顺序执行。 转移范围都只有-128~+127个字节。所有条件 转移指令对标志位均无影响。★ 单标志位转移指令 ★ 无符号数的条件转移指令 ★ 有符号数的条件转移指令★ 测试CX条件转移指令 1)单标志位转移指令指 令 JZ/JE JNZ/JNE JS JNS 测试条件 ZF=1 ZF=0 SF=1 SF=0 含 义 0/相等则转移 非0/不相等则转移 结果为负则转移 结果非负则转移 JNP/JPO PF=0 指 令 JP/JPE 测试条件 PF=1 含 义 低8位中?1”的 个数为偶数 则转移 低8位中?1”的 个数为奇数 则转移JOJNOOF=1OF=0结果溢出则转移结果不溢出则转移JCJNCCF=1CF=0有进位则转移无进位则转移 2)无符号数的条件转移指令该组转移指令用于无符号数的比较,并根据比 较的结果进行转移。 3)有符号数的条件转移指令该组转移指令用于有符号数的比较,并根据比较的 结果进行转移。 4)测试CX条件转移指令? ?格式:JCXZ 目标标号 功能:若(CX)=0,则转移到目标标号所指定 地址去执行程序。 3.循环转移指令一般用它们来实现程序循环,循环的次数必须 放在CX寄存器中,这组指令也不影响标志位。 有三条循环控制指令:★ 计数循环指令 ★ 相等/为零计数循环指令 ★ 不相等/不为零计数循环指令 1)计数循环指令格式: LOOP 标号 ? 功能:每执行一次LOOP指令,CX的内容减 1,若CX≠0,则循环转移到标号所指定的目 标地址去重复执行程序,直到CX=0,退出循 环,接着执行LOOP指令的下一条指令。 ? 例: MOV CX,0100H;设Z循环次数 DELAY:LOOP DELAY? 2)相等/为零计数循环指令? ?格式:LOOPE/LOOPZ 标号 功能:每执行一次循环指令,CX的内容减1, 若CX≠0且ZF=1,则循环转移到标号所指定的 目标地址去重复执行程序,否则执行循环指 令的下一条指令。 3)不相等/不为零计数循环指令? ?格式:LOOPNE/LOOPNZ 标号 功能:每执行一次循环指令,CX的内容减1, 若CX≠0且ZF=0,则循环转移到标号所指定的 目标地址去重复执行程序,否则执行循环指 令的下一条指令。 4.子程序调用和返回指令主程序与子程序★ 子程序调用指令 ★ 返回指令 主程序与子程序主程序 子程序CALL labelRET 回到CALL指令后的指令处返回地址 1)子程序调用指令★ 段内直接调用 ★ 段内间接调用 ★ 段间直接调用 ★ 段间间接调用 (1)段内直接调用? ?格式:CALL 标号 功能:首先将返回地址(CALL指令的下一条 指令)(16位偏移地址)压入堆栈,然后将标号 所指的子程序在本段中的偏移地址送入IP, 转子程序执行。 (2)段内间接调用? ?格式:CALL WORD PTR OPD 功能:首先将返回地址压入堆栈,然后将目 的操作数的内容送入IP,转至同一段内的子 程序执行。 (3)段间直接调用? ?格式:CALL FAR PTR 标号 功能:首先将断点地址CS、IP顺序压入堆栈, 然后将标号所在的段基址送入CS,将标号相 对所在段的偏移地址送入IP,转子程序执行。 (4)段间间接调用? ?格式:CALL DWORD PTR OPD 功能:首先将断点地址CS、IP顺序压入堆栈, 然后将有效地址指定的4个字节送入IP、CS (低地址的两个字节送IP,高地址的两个字 节送CS),转子程序执行。 2)返回指令返回指令用来控制程序返回断点地址处(相应 CALL指令的下一条指令)继续执行下去。★ 返回指令 ★ 带弹出值的返回指令★ 注意 (1)返回指令? ? ??格式:RET 功能:把断点地址从堆栈弹出送IP或IP、CS。 如该子程序为FAR类型,首先从堆栈弹出一 个字送IP(SP+2→SP),再从堆栈弹出一个字 送CS (SP+2→SP)。 如该子程序为NEAR类型,从堆栈弹出一个字 送IP(SP+2→SP),从而返回主程序。 (2)带弹出值的返回指令? ?格式:RET n 功能:n为偶数,在执行RET指令后,再修改 指针SP+n→SP,也即先从堆栈弹出断点地址 送IP或IP、CS,再废除栈顶的n个字节。 注意? ? ?CALL和RET指令不影响标志位。 CALL和RET指令必须成对使用。 与无条件转移指令的不同之处,在于它含有 将断点地址入栈和出栈的操作。 5.中断和中断返回指令主程序与中断服务程序中断指令:使CPU暂停执行后续指令,而转去 执行相应的中断服务程序。 ?中断返回指令:从中断服务程序返回主程序。?★ 软中断指令 ★ 中断返回指令 ★ 溢出中断指令 主程序与中断服务程序主程序中断服务程序中断请求断点IRET中断请求可以来自处理器外部的中断源, 也可以由处理器执行指令引起。 1)软中断指令? ??格式:INT n 功能:n为中断类型码,可以取0~0FFH之间的256个 值。每个中断类型码在中断矢量表中占4个字节,前 两个字节用来存放中断服务程序入口地址的偏移地 址,后两个字节用来存放段基址。 CPU执行INT指令时,首先将标志寄存器FR 入栈, 接着清除IF、TF,然后将当前程序断点的段基址和 偏移地址入栈保护,最后将中断矢量表中与中断类 型码对应的4个字节内容先后送入IP、CS,这样CPU 转去执行中断服务程序。 2)中断返回指令? ??格式:IRET 功能:放在中断服务程序的出口处,由它从 堆栈中弹出程序断点分别送IP、CS,并弹出 一个字送标志寄存器FR,以退出中断,返回 到断点处执行后续程序。 中断服务程序的最后一条指令必须是IRET。 3)溢出中断指令? ?格式:INTO 功能:该指令为单字节指令,中断类型码为4, 放在有符号的算术运算指令之后,仅当运算 产生溢出(OF=1)时,即向CPU发出溢出中断 请求。 思考题条件转移指令JNE的测试条件是 。A.ZF=1C.ZF=0B.CF=0D.CF=1答案:C 思考题使得JB指令执行转移操作的条件是A.CF=1 且ZF=0 C.CF=0或ZF=1 B.CF=1 D.ZF=0。答案:A 思考题假设AX和BX寄存器中存放的是有符号整数,为了判 断AX寄存器中的数据是否大于BX寄存器中的数据, 应采用下面 指令序列? A.SUB AX,BX B.SUB AX,BX C.CMP AX,BX D.CMP AX,BX JC LABEL JNC LABEL JA LABEL JG LABEL答案:D 例:判断是否为字母Y;寄存器AL中是字母Y(含大小写),则令AH=0, 否则令AH=-1 CMP AL,’y’ ;比较AL与小写字母y JE NEXT ;相等,转移 CMP AL,’Y’ ;不相等, ;继续比较AL与大写字母Y JE NEXT ;相等,转移 MOV AH,-1 ;不相等,令AH=-1 JMP DONE ;无条件转移指令 NEXT: MOV AH,0 ;相等的处理:令AH=0 DONE: …… 思考题有下列程序段 AGAIN:MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI LOOP AGAIN 下列指令中 可完成与上述程序段相同的功能。 B.REP LODSB D.REPE SCASB 答案:AA.REP MOVSB C.REP STOSB 思考题有下列程序段 AGAIN:MOV ES:[DI],AL INC DI LOOP AGAIN 下列指令中 A.REP MOVSB C.REP STOSB 可完成与上述程序段相同的功能 B.REP LODSB D.REPE SCASB答案:C 思考题设(SP)=000CH,(SS)=00A8H,在执行 CALL DWORD PTR [DI]指令后得到栈顶的物 理地址为 。A.00A90H C.00A8AH B.00A8EH D.00A88H 答案:D 思考题若(SP)=0124H,(SS)=3300H,在执行RET 4这条指令后,栈 顶的物理地址为 。 A.33120H C.33128H B.3311EH D.3312AH答案:D 思考题如果一个子程序的末尾采用段间返回指令,则返回时,从 堆栈弹出 个字节。 A.1 B.2 C.4 D.6答案:C 思考题如果一个子程序的末尾采用段内返回指令,则返回时,从堆 栈弹出 个字节。 A.1 B.2 C.4 D.6答案:B 思考题在RET n指令中,n可以为 A.1 B.3 C.4 D.5 。答案:C 思考题下列指令中允许寻址范围最大的是A.JNZ NEXT B.LOOP NEXT。C.JMP SHORT PTR NEXTD.CALL NEAR PTR PROC_NAME答案:D 思考题已知(IP)=1000H,(SP)=2000H,(BX)=283FH,指令 CALL WORD PTR[BX]的机器代码是FF17H,试问执行该 指令后,内存单元1FFEH中的内容是 。 A.28H B.3FH C.00H D.02H答案:D 思考题设(SP)=1000H,(CS)=1FC0H,(IP)=2140H,则执行段间调 用指令之后,堆栈段内0FFEH单元的内容为 。A.1FH B.C0H C.21H D.40H答案:B 例:十六进制转换为ASCII码的子程序;子程序:将DL低4位的一位16进制数转换成ASCII码 HTOASC PROC AND DL,0FH;只取DL的低4位 OR DL,30H;DL高4位变成3 CMP DL,39H;是0~9,还是0Ah~0Fh ? JBE HTOEND;是0~9,转移 ADD DL,7;是0Ah~0Fh,加上7 HTOEND: RET;子程序返回 HTOASC ENDP;主程序:调用子程序MOV DL,28H CALL HTOASC 3.3.6 处理器控制类指令1 2 标志位操作指令 外部同步指令 1.标志位操作指令? ? ??? ? ?进位位清0指令:CLC 进位位求反指令:CMC 进位位Z1指令:STC 关中断指令:CLI;ZIF=0,禁止外部可屏蔽中断。 开中断指令:STI;ZIF=1,允许外部可屏蔽中断。 方向标志清0指令:CLD 方向标志Z1指令:STD 2.外部同步指令空操作指令NOP 不执行任何操作,其机器码占一个字节。 ?暂停指令HLT 该指令执行后,使机器暂停工作,使处理器处于停机状态,以 等待一次外部中断到来,中断结束后,程序继续执行,处理器 继续工作。 ?交权指令ESC 协处理器在系统加电工作后,就不断检测CPU是否需要协助工 作,当发现ESC指令时,被选定的协处理器便开始工作。 ?等待指令WAIT 该指令每隔5个时钟周期就测试一次TEST信号,若该信号为高 电平,CPU继续执行WAIT指令,进入等待状态,否则结束等 待,执行后续指令。? 3.4 80386的寻址方式和指令系统3.4.1 80386的寻址方式3.4.2 80386的指令系统 3.4.1 80386的寻址方式包括立即寻址、寄存器寻址、直接寻址和寄存器间接寻址。 ?按照80386系统的存储器组织方式,逻辑地址由选择子和偏 移量组成。 ?偏移量的计算方法: 偏移量=基址+变址×比例因子+位移量 ①基址。任何通用寄存器都可以作为基址寄存器。 ②位移量。在指令操作码后面的32位、16位或8位数。 ③变址。除了ESP寄存器外,任何通用寄存器都可以作为变 址寄存器。 ④比例因子。可以为1、2、4或8。 ?按照4个分量组合偏移量的不同方法,可以有9种存储器寻 址方式,其中8种属于寄存器间接寻址。? 9种存储器寻址方式(1)直接寻址方式 (2)寄存器间接寻址方式 (3)基址寻址方式 (4)变址寻址方式 (5)带比例因子的变址寻址方式 (6)基址变址寻址方式 (7)基址加带比例因子的变址寻址方式 (8)带位移量的基址加变址寻址方式 (9)带位移量的基址加带比例因子的变址寻址方式 (1)直接寻址方式??位移量就是操作数的有效地址,此位移量包 含在指令中。 例:DEC WORD PTR [200] ;有效地址为200偏移量=基址+变址×比例因子+位移量 (2)寄存器间接寻址方式? ?基址寄存器的内容为操作数的有效地址。 例: MOV [EBX],EAX;有效地址在EBX偏移量=基址+变址×比例因子+位移量 (3)基址寻址方式??基址寄存器的内容和位移量相加形成有效地 址。 例如:MOV [EBX+100],EAX;有效地址为 EBX的内容加100偏移量=基址+变址×比例因子+位移量 (4)变址寻址方式??变址寄存器的内容和位移量相加形成有效地 址。 例:SUB EAX,[ESI],20;有效地址为ESI 的内容加20偏移量=基址+变址×比例因子+位移量 (5)带比例因子的变址寻址方式??变址寄存器的内容乘以比例因子,再与位移 量相加形成有效地址。 例:SUB EAX,[ESI*8],7;有效地址为ESI 的内容乘以8再加7偏移量=基址+变址×比例因子+位移量 (6)基址变址寻址方式??基址寄存器的内容加上变址寄存器的内容组 成有效地址。 例:SUB EAX,[ESI][EBX] ;有效地址为 EBX内容加ESI内容偏移量=基址+变址×比例因子+位移量 (7)基址加带比例因子的变址寻址方式??变址寄存器的内容乘以比例因子再加上基址 寄存器的内容组成有效地址。 例:MOV ECX,[EDI*2][EBX];有效地址 为EDI内容乘以2再加EBX内容偏移量=基址+变址×比例因子+位移量 (8)带位移量的基址加变址寻址方式??基址寄存器的内容加位移量,再加上变址寄 存器的内容组成有效地址。 例:MOV EDX,[ESI][EBP+200H];有效地 址为EBP内容加200H加ESI内容偏移量=基址+变址×比例因子+位移量 (9)带位移量的基址加带比例因子的变址寻址方式??变址寄存器的内容乘以比例因子,再加上基 址寄存器内容与位移量之和组成有效地址。 例:MOV ECX,[EDI*2][EBX+20] ;有效地 址为EDI内容乘以2,再加EBX内容再加20偏移量=基址+变址×比例因子+位移量 3.4.2 80386的指令系统80386的指令系统完全兼容8086指令系统 ?80386指令系统扩展了数据宽度,对存储器寻址方式也进行了 扩充,另外还增加了少量指令。 ?分为:?1 2 3 4 5 6 7数据传送类指令 算术运算类指令 逻辑运算类指令 串操作指令 转移、循环和调用指令 条件设置指令 系统设置和测试指令 1.数据传送类指令★ 通用数据传送指令 ★ 标志寄存器传送指令★ 目标地址传送指令★ 输入/输出指令 1)通用数据传送指令使用MOV指令时,两个操作数的位数必须相同,如 不同,可以选用新增的MOVZX和MOVSX指令。如: MOVZX AX,BL;该指令将BL的内容带符号扩展为 一个字送入AX。 ?另外PUSH指令的功能有所扩展,其源操作数可以是 立即数。如:PUSH 0204H ?另外,80386指令系统还提供了PUSHA指令,可以将 全部16位寄存器一次压入堆栈,提供的PUSHAD指令 可以全部32位寄存器一次压入堆栈。? 2)标志寄存器传送指令???在LAHF、SAHF、PUSHF和POPF的基础上, 增加了两条指令,即: PUSHFD;将标志寄存器的内容作为双字压 入堆栈 POPFD ;从堆栈弹出双字送标志寄存器 3)目标地址传送指令????80386的地址传送指令实现6字节的地址指针传送。 地址指针来自存储单元,目的地址为两个寄存器, 其中一个为段寄存器,一个为双字的通用寄存器。 LDS EBX,DATA;将DATA开始的指针送DS、 EBX寄存器 LSS ESP,DATA;将DATA开始的指针送SS、ESP 寄存器 这些指令适合32位微机系统的多任务操作,因为在 任务切换时,需要同时改变段寄存器和偏移量指针 的值。 4)输入/输出指令输入/输出指令和8086完全相同,端口地址可以 在指令中给出,也可以由DX寄存器给出。 2.算术运算类指令? ? ? ? ? ? ??算术运算指令的用法和8086中基本一致,只是在80386指令系统中,运算 支持32位。 例如: ADD EAX,0FF200A0H;将EAX 内容加0FF200A0H送回EAX 寄存器 SUB EAX,EBX;将EAX 内容减去EBX内容送回EAX寄存器 在80386指令系统中,对IMUL指令给出两种扩充形式, 例如: IMUL DX,BX,100;将BX的内容乘以100,结果送DX寄存器 这类指令是用一个立即数去乘一个放在寄存器或存储器中的数,结果放 入指定的寄存器。 例如: IMUL EDX,ECX;将EDX的内容乘以ECX内容,结果送EDX 这类指令是一个寄存器操作数乘一个同样长度的放在寄存器或存储器的 数,结果放入该寄存器。但由于这两类指令的乘积和被乘数、乘数的长 度一样,有时会产生溢出,如溢出,OF标志被自动Z1。 3.逻辑运算类指令??? ??逻辑运算指令包括逻辑运算和移位指令。这两组指令的用法 和8086中基本一致,只是在80386指令系统中,运算和移位 支持32位。 例如:AND EAX,EBX;将EAX 内容与EBX内容相与,结 果送回EAX ROL EBX,CL;按CL指定的次数将EAX内容循环左移 在80386指令系统中,还增加了两条专用的双精度移位指令, 即双精度左移指令SHLD和双精度右移指令SHRD。 例如: SHRD EAX,EBX,10;这条指令将EAX的内容右 移10位,高10位由EBX的低10位来补充,而EBX的内容不变。 4.串操作指令???80386的串操作指令和8086中基本一致,包括MOVS、 CMPS、SACS、LODS和STOS。此外,80386指令 系统还增加了字符串输入指令INS和字符串输出指令 OUTS,来处理输入/输出端口的数据块的读写。 INS指令可以从一个输入/输出端口读入数据送到一 串连续的存储单元;OUTS指令可以将一串连续的存 储单元的内容顺序输出到一个输入/输出端口。 INS指令使用时有INSB、INSW 和INSD三种形式, 分别对应字节串、字串和双字串。OUTS与之类似。 5.转移、循环和调用指令???80386的转移指令在形式和意义上和8086相同, 唯一不同的是条件转移的地址不再受范围的 限制,可以到达存储空间的任何地方。 循环指令LOOP、LOOPE、LOOPNE等与8086 完全相同,转移范围仍然在-128~+127。 调用指令CALL和返回指令RET在用法和含义 上与8086类同,只是在80386中,由于EIP是 32位,故在堆栈操作时,对于EIP的操作是4 个字节。 6.条件设Z指令???条件设Z是80386中新增加的,用来帮助高级 语言估价布尔表达式。 例如:SETZ AL;若ZF=1,则AL设Z为1, 否则设Z为0 CMP AX,1000 SETBE BX;若AX低于等于1000,则BX设 Z为1,否则设Z为0 7.系统设Z和测试指令这组指令也是80386中新增加的,它们一般出现在操作系统中, 用来对系统设Z和测试。 1)CLTS 清TS标志指令 2)SGDT/SLDT/SIDT 指令 3)LTR 装入任务寄存器指令 4)STR 存储任务寄存器指令 5)LAR 装入访问权指令 6)LSL 装入段界限值指令 7)LGDT/LLDT/LIDT 指令 8)VERR/VERW 检测段类型指令 9)LMSW 装入机器状态字指令 10)SMSW 存储机器状态字指令 11)ARPL 调整请求权级指令 2)SGDT/SLDT/SIDT 指令? ?这3条指令将全局描述符表寄存器、局部描述符表寄存器或 中断描述符表寄存器的内容送到存储器。 例如:SGDT MEM1;其中MEM1为6字节存储器操作数 SLDT MEM2;其中MEM2为2字节存储器操作数 SIDT MEM3;其中MEM3为6字节存储器操作数 3)LTR 装入任务寄存器指令??这条指令一般用在多任务操作系统中,它将 内存中2个字节装入任务寄存器TR,执行该指 令后,相应的任务状态段TSS 标上?忙?标 志。 例如:LTR MEM2;其中MEM2为2字节存储 器操作数 4)STR 存储任务寄存器指令??这条指令一般用在多任务操作系统中,它将 任务寄存器TR的内容送入内存中2个字节。 例如: STR MEM2 ;其中MEM2为2字节存 储器操作数 5)LAR 装入访问权指令??本指令将2字节选择子中的访问权字节送目的 寄存器。 例如:LAR AX,SELECT;将选择子中的访 问权字节送AH,AL清0 6)LSL 装入段界限值指令??本指令将描述符中的段界限值送目的寄存器。 在指令中,由选择子来指出段描述符。 例如: LSL BX,SELECT2;将SELECT2选 择子所对应的描述符中的段界限值送BX 7)LGDT/LLDT/LIDT 指令? ?这3条指令分别将存储器的内容送全局描述符表寄存器、局 部描述符表寄存器或中断描述符表寄存器的内容。 例如:LGDT MEM1;其中MEM1为6字节存储器操作数 LLDT MEM2;其中MEM2为2字节存储器操作数 LIDT MEM3;其中MEM3为6字节存储器操作数 8)VERR/VERW 检测段类型指令???VERR指令检测选择子所对应的段是否可读, VERW指令则检测一个选择子所对应的段是 否可写。 例如:VERR SELECT1;将SELECT1选择子 所对应的段是否可读 VERW SELECT2;将SELECT2选择子 所对应的段是否可写 9)LMSW 装入机器状态字指令??本指令将存储器中的2个字节送到机器状态字 MSW。通过这种方式,可以使CPU切换到保 护方式。检测选择子所对应的段是否可读, VERW指令则检测一个选择子所对应的段是 否可写。 例如:VMSW [SP] ;将堆栈指针SP所指出的 2个字节送MSW 10)SMSW存储机器状态字指令??本指令将2个字节机器状态字MSW存入内存 中。 例如:SMSW MEM2;其中MEM2为2字节存 储器操作数 11)ARPL调整请求权级指令??本指令可以调整选择子的RPL字段,由此常用 来阻止应用程序访问操作系统中涉及安全的 高级别的子程序。ARPL的第一个操作数可由 存储器或寄存器给出,第二个操作数必须是 寄存器。如前者的RPL(最后2 位)小于后者的 RPL,则ZFZ1,且将前者的RPL增值,使其 等于后者的RPL;否则,ZF清0,并不改变前 者的RPL。 例如:ARPL MEM_WORD,BX 3.5 Pentium新增加的指令Pentium一共增加了3条处理器专用指令和5条系 统控制指令。12处理器专用指令系统控制指令 1.处理器专用指令★ CMPXCHG8B m 8字节比较指令 ★ RDSTC 读时钟周期数指令 ★ CPUID 读CPU的标识等有关信息 1)CMPXCHG8B m 8字节比较指令指令将EDX:EAX中的8个字节与m所指的存储 器中的8个字节比较: ? 若相等,则ZFZ1,并将EDX:EAX中的8个 字节送到目的存储单元。 ? 若不相等,则ZF清0,并将目的存储单元8 个字节送EDX:EAX中。 2)RDSTC 读时钟周期数指令本指令读取CPU中用来记录时钟周期数的64位 计数器的值,并将读取的值送EDX:EAX,供一 些应用软件通过两次执行该指令来确定某段程 序需要多少时钟周期。 3)CPUID 读CPU的标识等有关信息本指令用来获得Pentium处理器的类型等有关信 息。在执行此指令前,EAX中如为0,则指令执 行后,EAX、EBX、ECX、EDX的内容合起来 即为Intel产品的标识字符串,如此前EAX中为1, 则指令执行后,在EAX、EBX、ECX、EDX 中 得到CPU级别、工作模式、可设Z的断点数等。 2.系统控制指令1)RDMSR 读取模式专用寄存器指令 ? 本指令用来读出Pentium处理器的模式专用寄存器中的值。在 执行该指令前,在ECX中设Z寄存器号,可以为0~14H,指 令执行后,读取的内容存放EDX:EAX。 2)WRMSR 写入模式专用寄存器指令 ? 本指令将EDX:EAX中的64位数写入模式专用寄存器。同样在 执行该指令前,必须在ECX中设Z寄存器号,可以为0~14H。 3)RSM 复位到系统管理模式 4)MOV CR4,R32 将32位寄存器的内容送控制寄存器CR 5)MOV R32,CR4 将控制寄存器CR内容送32位寄存器 作业《微机原理学习与实践指导》P.142. (6)、(7)、(8)、(9) ?5.不做(9)、(15)、(17) ?6、9、10、17?自行完成《微机原理学习与实践指导》第3章习题
更多搜索:
赞助商链接
All rights reserved Powered by
文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 sub是什么运算 的文章

 

随机推荐