




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1(1) 不考虑借位的减法指令SUB 格式: SUB dest, src 操作: dest(dest)-(src)注:1.源和目的操作数不能同时为存储器操作数 2.立即数不能作为目的操作数指令例子: SUB AL,60H SUB BX+20H,DX SUB AX,CX2. 减法指令2SBB指令主要用于多字节的减法。格式: SBB dest, src操作: dest(dest)-(src)-(CF)指令例子: SBB AX,CX SBB WORD PTRSI,2080H SBB SI,DX(2) 考虑借位的减法指令SBB3例:x、y、z均为32位数,分别存放在地址为X, X+2;Y,Y+2;Z,
2、Z+2的存储单元中,用指令序列实现wx+y+24-z,结果放在W, W+2单元中。 MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入W, W+2单元4作用类似于C语言中的”操作符。格式:DEC dest 操作: dest (dest)-1指令例子: DEC CL DEC BYTE PTRDI+2 DEC SI (3) 减1指令DEC5减一指令通常用于存储器寻址地址
3、指针向低地址方向修正或用于循环过程计数器记数指针修正。例 将数据段偏移地址为2000H开始100字节内容传送到同段偏移地址为2050H开始100个字节单元中去。6格式: NEG dest操作: dest 0-(dest)利用NEG指令可得到负数的绝对值。例:若(AL)=0FCH,则执行 NEG AL后, (AL)=04H,CF=1本例中,0FCH为-4的补码,执行求补指令后,即得到4(-4的绝对值)。(4) 求补指令NEG7例 已知内存BUFF开始,存放有100个字节型带符号数,每个单元数据求其绝对值并存回原处。8格式: CMP dest, src操作: (dest)-(src)CMP也是执行
4、两个操作数相减,但结果不送目标操作数,其结果只反映在标志位上。指令例子: CMP AL,0AH CMP CX,SI CMP DI,BX+03(5) 比较指令CMP9根据标志位来判断比较的结果1)根据ZF判断两个数是否相等。若ZF=1,则两数相等。2)若两个数不相等,则分两种情况考虑: 比较的是两个无符号数 若CF=0,则destsrc; 若CF=1,则destsrc。 比较的是两个有符号数 若OFSF=0(两标志位同状态),则destsrc; 若OFSF=1(两标志位异状态),则destsrc。10(6)压缩BCD码减法调整指令DAS 指令格式: DAS 指令功能: 对AL中两个压缩的BCD码
5、相减后的结果进行调整。(类似DAA)11(7)非压缩BCD码减法调整指令AAS 指令格式: AAS 指令功能: 对AL中非压缩BCD码相减的结果进行调整。(类似AAA)特别提醒:1)凡涉及十进制调整加减运算必须使用字节型操作数,不能使用字型操作数。2)分析此类程序运行结果时,不必深究运算原理,结果一定是十进制数运算结果的原型表示码(即压缩BCD码或非压缩BCD码)。12进行乘法时: 8位*8位16位乘积 16位*16位32位乘积(1) 无符号数的乘法指令 MUL MEM/REG格式: MUL src操作:字节操作数 (AX) (AL) (src) 字操作数 (DX, AX) (AX) (src
6、)指令例子: MUL BL ;(AL)(BL),乘积在AX中 MUL CX ;(AX)(CX),乘积在DX,AX中 MUL BYTE PTRBX3. 乘法指令 13格式与MUL指令类似,只是要求两操作数均为有符号数。指令例子: IMUL BL ;(AX)(AL)(BL) IMUL WORD PTRSI ;(DX,AX)(AX)(SI+1SI) (2) 有符号数乘法指令IMUL注意:MUL/IMUL指令中 AL(AX)为隐含的乘数寄存器; AX(DX,AX)为隐含的乘积寄存器; SRC不能为立即数; 除CF和OF外,对其它标志位无定义。14乘法指令对CF/OF的影响:00 乘积的高位为零11 乘
7、积高位不为零MUL指令: CF/OF =00 乘积的高位是符号扩展11 高位是乘积的一部分 IMUL指令: CF/OF =15 对AX中由两个非压缩BCD码相乘的结果进行调整。隐含的操作寄存器为AL和AH;AAM跟在MUL指令之后使用;影响标志位PF、SF、ZF,其它无定义;用AAM还可实现99的二-十进制转换。3) 乘法的十进制调正指令AAM164. 除法指令进行除法时:16位8位8位商 32位16位16位商对被除数、商及余数存放有如下规定: 被除数 商余数字节除法 AX AL AH 字除法 DX,AX AX DX17格式: DIV src操作:字节操作 (AL) (AX) / (SRC)
8、的商 (AH) (AX) / (SRC) 的余数 字操作 (AX) (DX, AX) / (SRC) 的商 (DX) (DX, AX) / (SRC) 的余数指令例子: DIV CL DIV WORD PTRBX注:若除数为零或AL中商大于FFH(或AX中商大于FFFFH),则CPU产生一个类型0的内部中断。(1) 无符号数除法指令DIV18(2) 有符号数除法指令IDIV格式: IDIV src操作与DIV类似。商及余数均为有符号数,且余数符号总是与被除数符号相同。注意: 对于DIV/IDIV指令 AX(DX,AX)为隐含的被除数寄存器。 AL(AX)为隐含的商寄存器。 AH(DX)为隐含的
9、余数寄存器。 src不能为立即数。 对所有条件标志位均无定义。19除法运算要求被除数字长是除数字长的两倍,若不满足则需对被除数进行扩展,否则产生错误。对于无符号数除法扩展,只需将AH或DX清零即可。对有符号数而言,则是符号位的扩展。可使用前面介绍过的符号扩展指令CBW和CWD关于除法操作中的字长扩展问题20例: 写出34H25H的程序段。 MOV AL,34H MOV BL,25H CBW ; AL的符号扩展到AH IDIV BL ; 0034H25H,结果为 ; (AH)=0FH, (AL)=01H21(3) 除法的十进制调正指令AAD对非压缩BCD除法运算进行调整。隐含的操作寄存器为AH,
10、AL;AAD要在DIV指令之前使用;影响标志位PF、SF、ZF,其它无定义;用AAD还可实现99的十-二进制转换。22例1:按十进制乘法计算78=? 程序段如下:MOVAL,07H;(AL)=07HMOVCL,08H;(CL)=08HMULCL;(AX)=0038HAAM;(AH)=05H,(AL)=06H 所得结果为非压缩的BCD码。例2:把3AH转换成等值的十进制数(非压缩BCD码)。 MOV AL,3AH ;58 AAM ;(AH)=05H,(AL)=08H23例3:按十进制除法计算557=? 程序段如下:MOVAX, 0505H;(AX)=55非压缩BCDMOVCL, 07H;(CL)
11、= 7AAD;(AX)=0037H DIVCL;(AH)=6, (AL)=7 所得结果为非压缩的BCD码(商7余6)。例4:把十进制数73转换成等值的二进制数。 MOV AX, 0703H ;(AX)= 73非压缩BCD AAD ;(AX)= 0049H24*5.BCD码运算的十进制调整指令专用于对BCD码运算的结果进行调整;包括:AAA、DAA、AAS、DAS、AAM、AAD;均为隐含寻址,隐含的操作数为AL和AH;为何要对BCD码的运算结果进行调整? BCD码本质上是十进制数,即应遵循逢十进一的规则。而计算机是按二进制(十六进制)进行运算,并未按十进制规则进行运算。251)加法的十进制调整
12、指令(1)非压缩BCD码加法调整AAA本指令对在AL中的由两个未组合的BCD码相加后的结果进行调正,得到一个正确的未组合的BCD码。AAA指令只影响AF和CF,其余标志无定义。AAA指令应紧跟在8位ADD或ADC指令之后。加法调整AAA指令既可对非压缩BCD码加法进行调整,也可对ASCII码形式的十进制数进行调整。26如果AL的低4位9AF=1,则: AL(AL)+6,(AH)(AH)+1,AF1 AL(AL)0FH) CFAF否则AL(AL)0FHAAA指令的源操作数为AL操作如下:27调整原理:先看一个例子 计算89 0000 1000 见右式 = 11 结果应为17,而计算机相加为11,
13、原因在于运算过程中,如遇到低4位往高4位产生进位时(此时AF=1)是按逢十六进一的规则,但BCD码要求逢十进一,因此只要产生进位,个位就会少6,这就要进行加6调正。这个1代表了16,而实际上仅应为10,即多进了6。 28如对上例的结果进行加6: 0001 0001 11 + 0000 0110 6 0001 0111 17 0000 1111- 1 0000 0111实际上当低4位的结果9(即AF之间)时,也应进行加6调正 (原因是逢十没有进位,故用加6的方法强行产生进位) 。CFAF,AF=129(2)压缩BCD码加法调整DAA两个压缩BCD码相加结果在AL中,通过DAA调整得到一个正确的压
14、缩BCD码.指令操作(调整方法): 若AL的低4位9AF=1 则(AL)(AL)+6,AF1 若AL的高4位9CF=1 则(AL)(AL)+60H,CF1除OF外,DAA指令影响所有其它标志。DAA指令应紧跟在8位ADD或ADC指令之后。30例: 0100 1000 48H MOV AL,48H + 0111 0100 74H MOV BL,74H 1011 1100 BCH ADD AL,BL + 0110 0110 66H DAA 1 0010 0010 1 22H (进位) (进位) 执行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令执行加66H调整,最后结果为: (AL
15、)=22H, CF=1, AF=131(1)非压缩BCD码减法的十进制调正指令AAS 对AL中由两个非压缩的BCD码相减的结果进行调整。调整操作为: 若AL的低4位9或AF=1,则: AL(AL)-6,AH(AH)-1,AF1 AL(AL)0FH CFAF 否则:AL(AL)0FH2)减法的十进制调整指令32举例:16-8=? MOV AX,0106H 0000 0110 06 MOV BL,08H - 0000 1000 - 08 SUB AL,BL 1111 1110 FE AAS - 0000 0110 - 06 1111 1000 F8 0000 1111 0F 0000 1000 0
16、8结果为:(AL)=08H,(AH)=0,CF=AF=133(2)压缩BCD码减法的十进制调正指令DAS 对AL中由两个压缩BCD码相减的结果进行调整。调整操作为: 若AL的低4位9AF=1,则: AL(AL)-6, 且AF1 若AL的高4位9CF=1,则: AL(AL)-60H,且CF1 DAS对OF无定义,但影响其余标志位。DAS指令要求跟在8位减法指令之后。343) 乘法的十进制调正指令AAM 对AX中由两个非压缩BCD码相乘的结果进行调整。调整操作为: (AL)/0AH, (AH)商,(AL)余数隐含的操作寄存器为AL和AH;AAM跟在MUL指令之后使用;影响标志位PF、SF、ZF,其它无定义;用AAM可实现99的二-十进制转换。35例1:按十进制乘法计算78=? 程序段如下:MOVAL,07H;(AL)=07HMOVCL,08H;(CL)=08HMULCL;(AX)=0038HAAM;(AH)=05H,(AL)=06H 所得结果为非压缩的BCD码。例2:把3AH转换成等值的十进制数。 MOV AL,3AH ;58 AAM ;(AH)=05H,(AL)=08H364) 除法的十进制调正指令AAD对非压缩BCD除法运算进行调整。调整操作为: (AL)(A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 协调服务协议合同范例
- 以工代赈设备采购合同范例
- 内贸服装采购合同范例
- 卫浴玻璃销售合同范例
- 个人mv 合同范例
- 乙方乙方租房合同范例
- 卖狗合同范例
- 俩兄弟合伙买房合同范例
- 医院拆除墙体合同范例
- 南通单位食堂外包合同范例
- 第十一届“大唐杯”新一代信息通信技术大赛(省赛)考试题及答案
- 【北京】七上生物知识点总结
- 2024年黑龙江省哈尔滨市中考英语真题(无答案)
- 中医内科学常用方剂方歌
- 财务主管岗位招聘笔试题及解答(某大型集团公司)
- 安徽省合肥市瑶海区2024年中考三模考试道德与法治历史试题-初中历史与社会(附答案解析)
- NB/T 11446-2023煤矿连采连充技术要求
- 我的动物朋友习作省公开课一等奖新名师课比赛一等奖课件
- GB/T 43934-2024煤矿土地复垦与生态修复技术规范
- 第8课《建设法治中国》第1框《科学立法严格执法公正司法全民守法》-【中职专用】《职业道德与法治》同步课堂课件
- SY-T 6966-2023 输油气管道工程安全仪表系统设计规范
评论
0/150
提交评论