ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:18.44KB ,
资源ID:8320359      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8320359.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(80X86汇编语言程序设计第二章⑤80868088指令.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

80X86汇编语言程序设计第二章⑤80868088指令.docx

1、80X86汇编语言程序设计第二章80868088指令80X86汇编语言程序设计第二章 8086/8088寻址方式和指令系统(二加减运算指令1. 加法指令 ADD格式:ADD OPRD1,OPRD2执行的操作:(OPRD1 (OPRD1 +(OPRD2例如 :MOV AX,7896H ; (AX =7896H即(AH =78H (AL =96H ; 各标志位保持不变ADD AL,AH ;AL=AL+AH=96H+78H(=10EH=0EH 前面的 1给了进位标志 CF 。即(AH =78H (AX =780EHCF=1PF=0AF=0ZF=0SF=0OF=0例如 :ADD DX,0F0F0H执行

2、前(DX =4652H执行后(DX =4652H+F0F0H(=13742H=3742H 前面的 1给了进位标志 CF 。 ZF=0 SF=0 CF=1 OF=0这里 4的二进制码是 0100, F 是 1111, 一个正数一个负数相加肯定 OF 是 0。例如 :ADD AX,4321执行前(AX =62A0H执行后(AX =62A0+4321=A5C1H 这里要注意, A 的二进制数是 1010,最高有效位为 1, 所以 SF 为 1。两个正数相加,结果为负的就溢出;两个负数相加,结果为正的就溢出。SF=1 ZF=0 CF=0 OF=1这里 6的二进制码是 0110,而 4的二进制码是 01

3、00,两个正数相加,结果 A 为 1010为负,所以 OF 为 1。从上面例子可看出:加法指令影响标志位。OF 位根据操作数的符号及其变化情况来设置:若两个操作数的符号相同而结果的符号与之相反 时 OF=1,否则 OF=0。CF 位可以用来表示无符号数的溢出。由于无符号数的最高有效位只有数值意义而无符号意义, 所以从该位产生的进位应该是结果的实际进位值,但在有限数的范围内就说明了结果。2. 带进位加指令 ADC (Add with Carry格式:ADC OPRD1,OPRD2执行的操作:(OPRD1 (OPRD1 +(OPRD2 +(CF 例如 :下列指令序列执行两个双精度(32位的加法。设

4、目的操作数放在 DX 和 AX 寄存器中, 其中 DX 存放高位字,源操作数存放在 BX 、 CX 中,其中 BX 存放高位字。 (双精度的数高位和 高位相加,低位和低位相加,首先加低位。 如指令执行前:(DX =0002H (AX =0F365H (BX =0005H (CX =0E024H指令序列为:ADD AX,CXADC DX,BX执行第一条指令后:(AX =AX+CX=F365+E024 =1D389 =D389HSF=1 ZF=0 CF=1 OF=0这里 F 的二进制是 1111, E 的二进制是 1110, 得出的 D 是 1101。 所以 OF 为 0。 (8以上全是负的, 8

5、以下全是正的执行第二条指令后:(DX =DX+BX+CF=0002+0005+0001=0008HSF=0 ZF=0 CF=0 OF=0则该指令序列执行完后:(DX =0008H (AX =D389H从上面的例子可以看出 :为实现双精度加法, 必须用两条指令分别完成低位字和高位字的加法, 而且在高位字相加时, 应 该使用 ADC 指令以便把前一条 ADD 指令作低位字加法所产生的进位值加入高位字之内。 另外, 带符号的双精度数的溢出,应该根据 ADC 指令的 OF 位来判断,而作低位加法用的 ADD 指令 的溢出是无意义的。 此指令影响标志位。3. 加 1指令 INC (INCrement 格

6、式:INC OPRD这条指令完成对操作数 OPRD 加 1,然后把结果送回 OPRD ,即:(OPRD (OPRD +1操作数 OPRD 可以是通用寄存器,也可以是存储单元。 这条指令执行的结果影响标志 ZF 、 SF 、 OF 、 PF 和 AF ,但它不影响 CF 。该指令主要用于调整地址指针和计数器。例如:写出把首地址为 BLOCK 的字数组的第 6个字送到 DX 寄存器的指令。要求使用以下几种寻址方式:(1寄存器间接寻址MOV BX,OFFSET BLOCK ;首先把 BLOCK 里的偏移地址送给 BX ,这里也可以 用 LEA BX,BLOCKADD BX,000AHMOV DS,B

7、X(2寄存器相对寻址LEA BX,BLOCK ; 也可以 MOV BX,OFFSET BLOCKMOV DX,BX000AH4. 减法指令 SUB (SUBtraction 格式:SUB OPRD1,OPRD2执行的操作:(OPRD1 (OPRD1 -(OPRD2例如 :SUB SI+14H,0136H指令执行前(DS =3000H, (SI =0040H, (30054H =4336物理地址 =DS+SI+14H=30000+0040+0014=30054H SUB (30054H =4336-0136=4200H指令执行后(30054H =4200HSF=0 ZF=0 CF=0 OF=0例

8、如 :SUB DH,BP+4指令执行前(DH =41H, (SS =0000H, (BP =00E4H, (000E8H =5AHSS:BP=00000+00E4+4=000E8 =5AHSIB DH-BP=41H-5AH=E7H指令执行后(DH =0E7HSF=1 ZF=0 CF=1 OF=0此指令影响标志位 CF 位说明无符号数相减的溢出, 同时它又是被减数的最高有效位向高位的借 位值。 OF 位则说明带符号数的溢出。 减法的 OF 位的设置方法为:若两个数的符号相反,而结 果的符号与减数相同则 OF=1。 说明结果是错误的。5. 带借位减指令 SBB (SuBtract with Bor

9、row格式:SBB OPRD1,OPRD2执行的操作:(OPRD1 (OPRD1 -(OPRD2 -CF例如 :SBB AL,DLSBB DX,AX该指令主要用于多字节数相减的场合。6. 减 1指令 DEC (DECrement 格式:DEC OPRD执行的操作:(OPRD (OPRD -1例如 :DEC VARB ;VARB 是字节变量操作数 OPRD 可以是通用寄存器,也可以是存储单元。在相减时,把操作数作为一个无符号数 对待。这条指令执行的结果影响标志 ZF 、 SF 、 OF 、 PF 和 AF ,但不影响 CF 。7. 取补指令 NEG (NEGate 格式:NEG OPRD执行的操

10、作:(OPRD 0-(OPRD 这条指令对操作数取补,就是用零减去操作数 OPRD ,再把结果送回 OPRD 。 (各位取反末尾加 1操作数可以是通用寄存器,也可以是存储单元。例如 :NEG ALNEG VARWSI ; 有效地址就是 VARW 的位移加 SI 的值如在字节操作时对 -128取补,或在字操作时对 -32768取补,则操作数不变,但 OF 被置 1。其它 均为 0。 此指令的执行结果影响 CF 、 ZF 、 SF 、 OF 、 AF 和 PF , 操作数为 0时,求补运算的结果使 CF=0,其它情况则均为 1。8. 比较指令 CMP (CoMPare 格式:CMP OPRD1,O

11、PRD2这条指令完成操作数 OPRD1减去操作数 OPRD2, 运算结果不送到 OPRD1。 但影响标志 CF 、 ZF 、 SF 、 OF 、 AF 和 PF 。例如 :CMP SI,DICMP CL,5CMP DX,BP-4比较指令主要用于比较两个数的关系,是否相等,谁大谁小。 执行了比较指令后,可根据 ZF 是 否置位,判断两者是否相等;如果两者是无符号数,则可根据 CF 判断大小;如果两者是有符号数,则要根据 SF 和 OF 判断大小。例如:设 X,Y ,Z 均为双精度数,它们分别存放在地址为 X,X+2,Y,Y+2,Z,Z+2的存储单元中,存 放时高位字在高地址中,低位字在低地址中。

12、下列指令序列实现 W X+Y+24-Z并用 W 和 W+2单元存放运算结果。MOV AX,XMOV DX,X+2ADD AX,YADC DX,Y+2ADD AX,24ADC DX,0SUB AX,ZSBB DX,Z+2MOV W,AXMOV W+2,DX例如:设当前数据段寄存器的内容为 1B00H ,在数据段的偏移地址 2000H 单元内,含有一个内 容为 0FF10H 和 8000H 的指针,它们是一个 16位变量的便宜地址和段地址,试写出把该变量装 入 AX 的指令序列。MOV BX,2000HMOV ES,2002HMOV AX,ES:BX例如:写出执行以下计算的指令序列,其中 X,W,

13、Z 均为存放 16位带符号数单元的地址。Z W+(Z-X一法:MOV AX,ZMOV BX,XSUB AX,BXMOV BX,WADD AX,BXMOV Z,AX二法:MOV AX,ZSUB AX,XADD AX,WMOV Z,AX遇到双精度数用 AX 存放低字,用 DX 存放高字。 先进行低字的加减法,再进行高字的加减法 , 因为在高位还要算入带进位的加减法。例如 :写出对存放在 DX 和 AX 中的双字长数求补的指令序列答案 :NEG DXNEG AXSBB DX,0如果是双字数进行求补,首先对高位(DX 进行求补,然后再对低位(AX 求补、 求补:用 0减或者各位取反末尾加一。一 . 指

14、出下列指令的错误:MOV AH,BX AH 是 8位寄存器, BX 是 16位寄存器; (寄存器寻址MOV AX,SIDI SI 时源变址寄存器, DI 是目的变址寄存器,两个都是变址寄存器,应该 有一个是基址; (基址加变址寻址CMP 15,BX 目的操作数不能是立即数;PUSH BL 压栈都是以字为单位;POP CS 出栈不能是 CS , CS 不能做目的操作数;MOV BX,SI 转移指令俩不能都是存储单元;MOV CS,AX 代码段 CS 不能做目的操作数;CMP OP1,OP2 (OP1,OP2是已定义的字节变量不能同时比较两个字节单元;CMP AX,OP1 (OP1是已定义的字节变

15、量 AX 是字而 OP1是字节,类型不匹配。(1分辨是单操作数还是双操作数;(2如果是双操作数,那么它是根据什么寻址方式;(3双操作数的目的操作数不能是立即数;(4两个操作数中必须有一个是寄存器(除了立即寻以外 ;(5双操作数中,代码段 CS 不能做目的操作数;(6最后检查两个操作数的类型是否匹配;(如果是单操作数,栈操作都是以字为单位(16位寄存器和 16位地址 ;(单操作数中,代码段 CS 不能做目的操作数;二 . 完成对字单元 BUF 的内容加 1运算,下面错误的指令是?A.MOV BX,BUF ;直接寻址,把 BUF 的内容送给 BX INC BXMOV BUF,BXB.MOV BX,OFFSET BUF ;把 BUF 的偏移地址给了 BXINC WORD PTRBX ;将 BX 中地址字单元的内容加 1C.MOV BX,BUF ;直接寻址,把 BUF 的内容送给 BX INC WORD PTRBX ;将 BX 中地址字单元的内容加 1D.MOV BX,0 ;将 BX 清零INC WORD PTR BUFBXBUF 是一个符号地址。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1