第2章 80X86汇编语言与汇编程序(3)—算术逻辑运算指令..

合集下载

80X86汇编语言指令集

80X86汇编语言指令集

80X86汇编语⾔指令集8086/8088汇编语⾔指令集数据传送指令集MOV功能: 把源操作数送给⽬的操作数语法: MOV ⽬的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压⼊或取出堆栈语法: PUSH 操作数 POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址⾄寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加⼀或减⼀语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取⼆进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: ⾮压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执⾏BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定⽅向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: ⽐较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执⾏语法: JMP 地址JXX功能: 当特定条件成⽴则跳往指定地址执⾏语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成⽴B: BELOW,当C=1时成⽴C: CARRY,当弁时成⽴ CXZ: CX寄存器的值为0(ZERO)时成⽴E: EQUAL,当Z=1时成⽴G: GREATER(⼤于),当Z=0且S=0时成⽴L: LESS(⼩于),当S不为零时成⽴N: NOT(相反条件),需和其它符号配合使⽤O: OVERFLOW,O=1时成⽴P: PARITY,P=1时成⽴PE: PARITY EVEN,P=1时成⽴PO: PARITY ODD,P=0时成⽴S: SIGN,S=1时成⽴Z: ZERO,Z=1时成⽴LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址 LOOPNE(Z) 地址标志位: ⽆CALL,RET功能: ⼦程序调⽤,返回指令语法: CALL 地址 RET RET n标志位: ⽆INT,IRET功能: 中断调⽤及返回指令语法: INT n IRET标志位: 在执⾏INT时,CPU会⾃动将标志寄存器的值⼊栈,在执⾏IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: ⽆CMPSB,CMPSW,CMPSD功能: 字符串⽐较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载⼊或存贮指令语法: LODSB LODSW STOSB STOSW标志位: ⽆REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S⽽定EMC 汇编语⾔指令集符号解说:1.符号‘R’:代表⼀般⽤途寄存器中的其中⼀个。

汇编语言与接口技术习题答案

汇编语言与接口技术习题答案

第 3 章80X86 的指令系统和寻址方式本章主要讲授:80X86 的数据类型、寻址方式、指令格式、指令系统(数据传送指令、算术运算指令、逻辑运算指令、串操作数指令、控制转移指令、处理机指令和高级语言指令)和80486 指令等。

通过本章的学习,注意下面几方面的内容:一、掌握80X86 的数据类型;二、掌握80X86 的寻址方式;三、掌握80X86 的指令系统及它们的一些使用实例。

四、了解保护属性检查指令、高级语言指令以及Cache 管理指令等。

习题精解1 已知DS= 2000H, BX= 0100H, SI = 0002H,存储单元[20100H]〜[20103H]依次存放12 3456 78H , [21200H]〜[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行后AX寄存器的内容。

(1)MOV AX,1200H(2)MOV AX,BX(3)MOV AX,[1200H](4)MOV AX,[BX](5)MOV AX,[BX+1100H](6)MOV AX,[BX + SI](7)MOV AX,[BX][SI+1100H]参考答案:根据物理地址形成公式:物理地址=段基址x 16 +有效地址,得:1)1200H2)0100H3)4C2AH4)3412H5)4C2AH6)7856H(7) 65B7H分析:本题主要考查点是数据寻址方式,寻址方式就是指令中用于说明操作数所在地址的方法,或者是寻找操作数有效地址的方法。

包括数据寻址和转移地址寻址两大类。

80X86的数据寻址方式总结如下:(1)立即寻址方式操作数作为指令的一部分而直接写在指令中, 这种操作数称为立即数, 这种寻址方式就 称为立即数寻址方式。

注: 1、使用立即寻址的指令主要用来给寄存器赋初值,并且只能用于源操作数字段 2 、不能直接给段寄存器和标志寄存器赋予立即数。

例: MOV AL,5MOV AX,1234H MOV EAX,12345678H(2) 寄存器寻址方式操作数存放在指令规定的某个寄存器(如:对于 16 位操作数,寄存器可以是 AX ,BX , CX DX SI ,DL ,SP 或BP;而对8位操作数,寄存器可以是AH AL ,BH, BL , CH CL , DH或DL )中。

汇编语言:x86汇编指令大全及其注意事项

汇编语言:x86汇编指令大全及其注意事项

汇编语⾔:x86汇编指令⼤全及其注意事项⽬录Part 1:instructionPart 22.1 (逻辑)运算、移位等常⽤指令2.1 (逻辑)运算、移位等常⽤指令2.2 循环移位指令2.3 数据串操作指令2.4 逻辑运算指令2.5 基于⼤⼩关系的跳转指令2.6 基于单标志位的转移指令Part 1:instruction积少成多,持续更新。

(这将会是⼀个极其漫长的过程)表格中各条指令的顺序根据笔者所认为的重要或常⽤程度进⾏排序,仅供参考。

Part 2本表格中所涉及的F是指状态寄存器,CF指进位标志位,其它以此类推。

2.1 (逻辑)运算、移位等常⽤指令这⼀部分记录汇编语⾔程序设计当中使⽤频率最⾼的⼀部分指令。

2.1 (逻辑)运算、移位等常⽤指令这⼀部分记录汇编语⾔程序设计当中使⽤频率最⾼的⼀部分指令。

指令作⽤注意事项⽰例mov dest,src传送指令1.dest和src不能同时为存储器操作数2.CS不能作为dest3.段寄存器之间不能互相传送4.⽴即数不能送⼊段寄存器mov ax,wordptr[bx+si+2]adddest,src加法指令dest,src不能同时为存储器操作数或段寄存器add ax,cx adcdest,src带进位加法指令dest=dest+src+CF,常⽤于多字节加法inc dest加⼀指令 1.此操作不影响CF的状态inc byte ptr[si]subdest,src减法指令1.dest,src的要求与add相同2.触发OF:异号相减且结果的符号为与被减数不同sub ax,cxsbbdest,src带进位减法常⽤于多字节减法dec dest减⼀指令不影响CF的状态,但其他⼏个标志位都会受到影响dec axmul dest⽆符号乘法指1.dest为字节数据,则与AL相乘,结果放⼊AX2.dest为字数据,与AX相乘结果低16位放⼊AX,⾼16位放⼊DX3.dest不能是⽴即数mul aximul dest有符号乘法细节与mul完全相同,对最⾼位的解释不同imul axdiv dest⽆符号除法1.dest为字节数据,⽤AX除以dest,商放在AL,余数放在AH2.dest为字数据,⽤低16位为AX,⾼16位为DX的双字数据除以dest,商放在AX,余数放在DXidiv dest带符号除法与⽆符号完全相同。

汇编_第2章 80X86计算机组织

汇编_第2章 80X86计算机组织

例1:(DS) = 2100H, (BX) = 0500H
物理地址 = 21000H + 0500H = 21500H
例2:(CS) = 3000H, (IP) = 1000H
物理地址 = 30000H + 1000H = 31000H
例3:(SS) = 1000H, (SP) = 0010H 物理地址 = 10000H + 0010H = 10010H 例4:(DS) = 3100H, (SI) = 1000H 物理地址 = 31000H + 1000H = 32000H
优点: 允许程序在存储器内重定位;
允许实模式程序在保护模式下运行;
有利于程序和数据的分离。
物理地址的形成
物理地址:每一个存储单元有一个唯一的20位地址 表示范围:00000H~FFFFFH 。 物理地址形成:段地址左移4位再加上偏移地址值
15 0 16位段地址 15 + 19 0 0 16位偏移地址 0000
≈ 1234H
4号字节单元存放的信息为 34H,表示:(0004)=34H
1EH 2FH
4号字单元的内容为1234H,表 示为:(0004)=1234H
1235H 1236H 1237H
字单元由两个字节单元组成,其地址采用它的低地 址来表示;且低位字节存入低地址单元,高位字节存入 高地址单元。
例:存储单元的地址 已知: (0004H)= 5678H
编译后的目标文 件达到3.59KB
}
用汇编语言实现同样的功能
data segment a db ? b db ? c db ? string db 'c=$' 汇编后的目 data ends 标文件只有 code segment 208字节 main proc far assume cs:code, ds:data, es:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax main mov es,ax code mov a,1 mov b,2 mov al,a add al,b mov c,al lea dx,string mov ah,09 int 21h add c,30h mov dl,c mov ah,2 int 21h mov dl,0ah int 21h mov dl,0dh int 21h ret endp ends end start

第2章 80X86汇编语言与汇编程序(3)—算术逻辑运算指令

第2章 80X86汇编语言与汇编程序(3)—算术逻辑运算指令
(dst) (dst)+1 例如: INC CX ; (CX) (CX)+1
说明:INC指令影响标志位,但不影响标志CF。
15 Glut _C 2013-08
4.
压缩BCD码加法调整指令
(1)格式: DAA (2)功能:对压缩的两位十进制加法结果进行调整。 计算机内部的所有运算,都是按照二进制运算规则进行的。 对于两位BCD数据相加,例如
对于任意字长的数的加法,都可以这样进行。
12 Glut _C 2013-08
这里我们没有判断溢出标志位OF,第一字节有进位 或溢出,表明超过16位的表示范围,将进位信号加到 高16位上,如果高16位出现溢出,需要看我们结果字 长了:
如果保留3个字长,则将进位再加到更高位上
否则判断产生溢出错误。 ADD ,ADC指令影响标志位: CF, OF, ZF, SF, AF, PF
2.3.2.1
加法运算指令
1. 不带进位加法指令
(1) 格式: ADD dst, src (2) 功能: 两个数相加,结果送 dst (dst) = (dst) + (scr) (3) 说明: 操作数可以是字节型,也可以是16位、32位。 源操作数可以使用立即数、寄存器操作数,或存储器操作数 目的操作数可以使用寄存器操作数或存储器操作数,不能是立 即数。 例如: ADD ADD
26 Glut _C 2013-08
如果一个正数调用NEG指令,实际上求出的是它 的机器负数。 例如 (AL)=14H, 执行
NEG AL
指令执行后 (AL) = 0 ECH -14H
如果一个负数,如果不先保存符号位,使用NEG指令 后,实际上变成了他的绝对值。 例如: MOV AL, 0ECH

80X86汇编语言程序设计 第二章⑦.8086 8088指令系统(四)逻辑运算和移位指令

80X86汇编语言程序设计 第二章⑦.8086 8088指令系统(四)逻辑运算和移位指令

80X86汇编语言程序设计第二章 8086/8088寻址方式和指令系统(四)逻辑运算和移位指令1.逻辑运算指令(1)否操作指令NOT格式:NOT OPRD这条指令把操作数OPRD取反,然后送回OPRD。

操作数OPRD可以是通用寄存器,也可以是存储器操作数,不能是立即数。

此指令对标志位没有影响。

例如:MOV AL,03HNOT AL指令执行后:(AL)=0FCH(2)与操作指令AND格式:AND OPRD1,OPRD2这条指令对两个操作数进行按位的逻辑“与”运算,结果送到目的操作数OPRD1。

该指令执行以后,标志CF=0,标志OF=0,标志PF、ZF、SF反映运算结果,标志AF未定义。

某个操作数自己与自己相“与”,则值不变,但可使进位标志CF清0。

与操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位清为0的场合。

把要维持不变的这些位于“1”相“与”,而把要清为0的这些位于“0”相“与”就能达到这样的目的相“与”:两个操作数都是1的,结果为1,其他情况全是0。

例如:MOV AL,23HMOV BL,02HAND AL,BL指令执行后:(AL)=02H(AL)=23H,将AL寄存器的第一位和第三位清零,其余位不变,则BL是什么时,与AL 执行AND指令可完成?(BL)=F5HMOV AL,23HMOV BL,F5HAND AL,BL(3)或操作指令OR格式:OR OPRD1,OPRD2这条指令执行以后,标志CF=0,标志OF=0.,标志PF、ZF、SF反映运算结果,标志AF未定义。

某个操作数自己与自己相“或”,则值不变,但可使进位标志CF清0。

相“或”:两个操作数中有一个是1的,结果为1,其他情况全是0。

或操作指令主要用于在使一个操作数中的若干位维持不变,而另外若干位置为1的场合。

把要维持不变的这些位于“0”相“或”,而把要置为1的这些位与“1”相“或”就能达到这样的目的。

例如:MOV BL,12HOR BL,BL(BL)=12H CF=0(4)异或操作指令XOR格式:XOR OPRD1,OPRD2相“异或”:两个操作数,一个是0,一个是1,则为1;两个都为1,则为0;两个都为0,则为0。

80X86的指令系统和寻址方式

80X86的指令系统和寻址方式
- 字节串:一串连续的字节。
- 字串:一串连续的字。
- 双字串:一串连续的双字。
3.2 80X86的寻址方式
• 数据寻址方式:是指获取指令所需的操 作数或操作数地址的方式
• 程序寻址方式:是指程序中出现转移和 调用时的程序定位方式
3.2.1 80X86的数据寻址方式 (共十种)
1、立即寻址方式
操作数作为指令的一部分,在直接指令中给出。
3.2.3操作数宽度和寻址宽度的确定
• 操作数宽度也称为“操作尺寸” • 寻址宽度也称为“寻址尺寸” • 实际上指的是操作数二进位数和可寻址的二进位数。 • 8086和80286的操作数宽度和寻址宽度都是16位的。 • 而32位处理器的操作数宽度和寻址宽度可以是16位的,
也可以是32位的,涉及到W域、缺省段属性及指令前缀 等概念。
按指令码中规定的寻址方式给出。此时,寻址所得到的不 是操作数,而是转移地址,用来更新IP内容。
JMP BX
..
2000:0FFFH
操作码
.. ..
2000:4000H
操作码
CS + BX(新 IP)
2000 4000
24000
..
(3)段间直接寻址 在段间直接寻址方式中,指 令码中将直接给出16位的段 地址和16位的段内偏移地址, 用来更新CS和IP内容。
汇编语言指令要解决的两个问题: 要指出进行什么操作——操作符; 要指出操作数和操作结果放在何处——寻址方式。
指令的基本构成:
目的

说明要执行的 操作对象,可以 是什么操作 有0个、1个或2个
指令举例: MOV AX , BX
操作码 操作数 ADD AX,[SI+6] INC BX NOP

IBM—PC(80x86)汇编语言与接口技术-第2章 80x86计算机组织

IBM—PC(80x86)汇编语言与接口技术-第2章 80x86计算机组织

• 80386是1985年研制出的一个32位微处理器, 内部及外部数据总线均为32位,地址线也为32 位,因此它可处理4G(232)字节的物理存储 空间。
• 1989年Intel公司又研制出新一代的微处理器 80486,80486芯片内除了有一个与80386相同 结构的主处理器外,还集成了一个浮点处理部 件FPU以及一个8K字节的高速缓冲存储器 (cache),使80486的计算速度和总体性能比 80386有了明显的提高。
• Intel公司在1982年推出了80286微处理器,它仍 然是16位结构。80286的内部及外部数据总线都 是16位的,但它的地址线是24位的,可寻址16M 字节的存储空间。
80286有两种工作方式,即实模式和保护模式: 实模式与8086工作方式相同,但速度比8086快。
保护模式除了仍具有16M字节的存储器物理地址空 间外,她还能为每个任务提供1G字节的虚拟存储 器地址空间。保护方式把操作系统及各任务所分配 到的地址空间隔离开,避免程序之间的相互干扰, 保证系统在多任务环境下正常工作。
• 8086是1978年Intel公司推出的16位微处理器。
(1)8086有16位数据总线,处理器与外部传送数据 时,一次可传送16位二进制数。
(2)8086有20位地址总线,寻址空间提高到1M字节。
(3)8086采用了流水线技术,可以实现处理器的内 部操作与存储器或I/O接口之间的数据传送操作重叠 进行,从而提高了处理器的性能。
2.2 基于微处理器的 计算机系统的构成
硬件:
中央处理机 CPU
总线控制 逻辑 系 统 总 线
存储器
接口
...
接口
大容量 存储器
...
I/O设备
I/O子系统
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

26 Glut _C 2013-08
如果一个正数调用NEG指令,实际上求出的是它 的机器负数。 例如 (AL)=14H, 执行
NEG AL
指令执行后 (AL) = 0 ECH -14H
如果一个负数,如果不先保存符号位,使用NEG指令 后,实际上变成了他的绝对值。 例如: MOV AL, 0ECH
80X86指令系统(续)
1 Glut _C 2013-08
算术运算指令包括加、减、乘、除基本运算指令,十进制运 算的调整指令。 可以进行带符号数的运算,也可以进行无符号数的运算。
2 Glut _C 2013-08
2.3.2 加减法运算 加减法运算结果可以存放在通用寄存器中,也可以存放在存 储器中。
Ο —按结果设置标志,Δ —不影响该标志位
Glut _C 2013-08 4
减法运算指令有
5 Glut _C 2013-08
乘法运算指令有
指令格式
操作功能 (AX) ←(src) × (AL) (DX:AX) ←(src) × (AX) (AX) ←(src) × (AL) (DX:AX) ←(src) × (AX)
NEG AL
Glut _C 2013-08
;(al)= -14h
;(al)= 14h
27
例:内存数据段存放了200个带符号数(字节),首 地址为TAB1,要求将各数取绝对值后存入以TAB2为 首址的内存区。 由于200个带符号数中可能既有正数,又有负数, 因此先要判断正负。如为正数,可以原封不动地传送 到另一内存区;如为负数,则需先求补即可得到负数 的绝对值,然后再传送。程序流程框图如下:
立即数IMM 通用寄存器 REG + 或 通用寄存器REG

结果保存在通用寄存器中
存储器MEM
立即数IMM 存储器MEM + 或 通用寄存器REG
结果保存在存储器中
Glut _C 2013-08
3
加法运算指令有
指令格式 操作功能 标志位影响 O S Z A P C
○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ △ × × × ○ × 1 × ○ ○ ○ ○ ○
Glut _C
AX, 3A5FH

8
AX, [BX+1000H];
ADD 2013-08
[BX+DI], AX;
2. 带进位加法指令
(1)格式: ADDC dst, src
(2)功能:除了两个操作数相加外,再加上进位信
号(将进位位加到最低位)。
(dst) = (dst)+(src)+CF 例如: ADDC ADC AX,BX ; (AX)←(AX)+(BX)+CF AL, BL ;(AL)←(AL)+(BL)+CF ;CF是进位标志。
28 Glut _C 2013-08
开始 取地址 SITAB1 DI TAB2 循环次数 CX200 CHECK AL [SI] (AL)<0 Y NEG AL
23 Glut _C 2013-08
2. 带进位位的减法指令
(1)格式: SBB dst, src (2)功能:(dst)(dst)-(src)-CF 它与减法指令SUB的区别在于还减去借位信号CF。它与带进位位的加法 指令一样,用于做多字(字节)的减法。 例如 SBB SUB AX, 2100H AL, BL
对于任意字长的数的加法,都可以这样进行。
12 Glut _C 2013-08
这里我们没有判断溢出标志位OF,第一字节有进位 或溢出,表明超过16位的表示范围,将进位信号加到 高16位上,如果高16位出现溢出,需要看我们结果字 长了:
如果保留3个字长,则将进位再加到更高位上
否则判断产生溢出错误。 ADD ,ADC指令影响标志位: CF, OF, ZF, SF, AF, PF
ADD dst, src (dst) ←(dst) +(src) ADC dst, src (dst) ←(dst)+(src)+(CF) INC dst (dst) ←(dst) + 1 AAA ASCII 码调整指令 非压缩 BCD码调整 DAA BCD调整指令
在微处理器中,没有专用的BCD码运算指令, 使用二进制运算指令进行BCD码数的运算,然后用 BCD码运算调整指令进行调整,重新得到BCD码的 结果。
的,因此,是否在加法指令后使用DAA或AAA指令,
是由我们设计程序时确定的——数据是BCD格式,一
定需要调整,是压缩的BCD码,则用DAA调整,是非
压缩的BCD码,则使用AAA调整。 加法指令,使用8位的加法运算,以AL作为目的 操作数。
21 Glut _C 2013-08
6. 交换及相加指令
(1) 格式 XADD dest, reg (2)功能: 将目的操作数和源操作数的数据进行交换,然后把源 操作数中的数据和目的操作数中的数据相加后送入目的操作 数。 dest→reg dest+reg→dest 相当于两条指令 XCHG dest, reg ADD dest, reg
× × × × × ×
DIV src
IDIV src AAD CBW CWD
Glut _C 2013-08
× × × × × × × ○ ○ △ ○ ×
BCD调整指令
若(AL)<80H,则(AH) ←00H, △ △ △ △ △ △ 否则(AH) ←FFH 若(AX)<8000H,则(DX) ←0000H, △ △ △ △ △ △ 否则(DX) ←FFFFH 7
等。对标志位的影响同SUB指令。
24 Glut _C 2013-08
3. 减一指令
(1)格式: DEC dst (2)功能: (dst) (dst)-1 例如: 如果(AX)=1234H,执行 DEC AX 后,(AX)=1233H DEC WORD PTR [BP] 对于堆栈区间BP指向的一个字内容-1。 WORD PTR 告诉编译程序,是字操作数。
我们设计程序时,如果参与运算的数据是压缩的 BCD码数据,则在做完加法运算后,需要使用一条 DAA指令进行调整。 注意这时的加法运算,应该使用8位的加法运算
ADD AL, src
目的操作数是AL。
ADD AX, src 对高8位无法进行调整。
DAA 指令影响标志位,但对OF没有定义。
对CF的影响——高4位大于9,或原来加法运 算CF=1,则CF=1,作为向高位的进位信号。
D31 D16 D15 D0 dst scr dst <-- 和
高16位使用带进位加法指令,低16 位的进位信号一起加进来
10 Glut _C 2013-08
+
开始 置 地 址
低 十 六 位 加 法 SIDAT1 DIDAT2 AX[SI] AX[SI+2] AX (AX) +[DI+2]+CF [SI+2](AX) 结束
19 Glut _C 2013-08
5. 非压缩BCD码加法运算调整指令
(1)格式: AAA (2)功能: 对非压缩的BCD码加法运算进行调整。 (3)对标志位的影响:只影响AF,CF 。
与DAA类似,它也是跟在以AL为目的操作数的字节性 加法指令后面使用。
20 Glut _C 2013-08
计算机中的数据格式,是我们在编写程序时确定
标志位影响 O S Z A P C
○ × × × × ○ ○ × × × × ○ × ○ ○ × ○ ×
MUL src IMUL src AAM
BCD调整指令
6 Glut _C 2013-08
除法运算指令有
指令格式 操作功能 (AL) ← (AX)/(src)的商 (AH) ← (AX)/(src)的余数 (AX) ← (DX:AX) /(src)的商 (DX) ← (DX:AX) /(src)的余数 (AL) ← (AX)/(src)的商 (AH) ← (AX)/(src)的余数 (AX) ← (DX:AX) /(src)的商 (DX) ← (DX:AX) /(src)的余数 标志位影响 O S Z A P C
3 7 + 2 6 6 3
(0110 0011 B)
Glut _C 2013-08
0011 0111 + 0010 0110 0101 1101
显然,结果 不是正确的 BCD码
16
DAA指令就是对这样的加法运算进行调整,使得它变 为正确的BCD运算结果。
调整方法:如果表示BCD的四位二进制位 > 9,或产生 向高位的进位,则在相应的BCD位+6。 例如上面的结果, 低4位=1101,大于9 结果变为 正确的 BCD码运 算结果了
13 Glut _C 2013-08
当然,对于80386~Pentium,可以直接使用32位运算
ADD EAX,EBX 64位运算等,还是这样先做低32位加法,然后再用带进位加 法指令做高32位运算。
14 Glut _C 2013-08
3. 加一指令 (1)格式
INC dst
(2)功能
将目标操作数的内容+1,再送回目标操作数。
0101 1101 + 0000 0110 0110 0011
17 Glut _C 2013-08
1000 1001 + 0111 1001 1 0000 0010
进位=1
+
进位=1
89 79 168
1 0000 0010 + 0110 0110 1 0110 1000 1 6 8
18 Glut _C 2013-08
该指令影响标志位,但不影响CF。
25 Glut _C 2013-08
相关文档
最新文档