ADD(ADD)加法指令
ADD DST , SRC //Byte/Word
执行操作: dst=dst+src
1.两个存储器操作数不能通过ADD指令直接相加, 即DST 和SRC必须有一个是通用寄存器操作数.
2.段寄存器不能作为SRC 和DST.
3.影响标志位Auxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag 和Zero Flag ,如下所示:
CF | 根据最高有效位是否有进(借)位设置的:有进(借)位时CF=1, 无进(借)位时CF=0. |
OF | 根据操作数的符号及其变化来设置的:若两个操作数的符号相同,而结果的符号与之相反时OF=1, 否则为0. |
ZF | 根据结果来设置:不等于0时ZF=0, 等于0时ZF=1 |
SF | 根据结果的最高位来设置:最高位为0, 则SF=0. |
AF | 根据相加时D3是否向D4进(借)位来设置:有进(借)位时AF=1, 无进(借)位时AF=0 |
PF | 根据结果的1的个数时否为奇数来设置:1的个数为奇数时PF=0, 为偶数时PF=1 |
ADC( ADd with Carry)带进位加法指令
ADC DST , SRC //Byte/Word
执行操作: dst=dst+src+CF //与ADD不同之处是还要加上进位标志位的值.
INC ( INCreament) 加1指令
INC OPR //Byte/Word
执行操作: OPR=OPR+1
1.OPR可以是寄存器和存储器操作数, 但不能是立即数和段寄存器
2.影响标志位OF,SF,ZF,PF 和AF,不影响CF.
SUB ( SUBtract ) 不带借位的减法指令
SUB DST , SRC //Byte/Word
执行操作:dst=dst - src
1.DST和SRC寻址方式及规定与ADD相同.
2.影响全部标志位.(判断标志位参见ADD)
SBB ( SuBtract with Borrow) 带借位减法指令
SBB DST , SRC //Byte/Word
执行操作:dst= dst - src - CF
DEC ( DECrement ) 减1指令
DEC OPR //Byte/Word
执行操作:OPR = OPR - 1 //除CF标志位, 其余标志位都受影响.
NEG OPR
执行操作:opr = 0- opr //将操作数按位求反后末位加1.
CMP OPR1 , OPR2
执行操作:OPR1 - OPR2 //与SUB指令一样执行运算, 但不保存结果.
比较情况 | 无符号数 | 有符号数 |
A=B | ZF=1 | ZF=1 |
A>B | CF=0 && ZF=0 | SF^OF=0 && ZF=0 |
A<B | CF=1 && ZF=0 | SF^OF=1 && ZF=0 |
A>=B | CF=0 || ZF=1 | SF^OF=0 || ZF=1 |
A<=B | CF=1 || ZF=1 | SF^OF=1 || ZF=1 |
MUL ( unsigned MULtiple ) 无符号数乘法指令
MUL SRC //Byte/Word .
执行操作:Byte => AX= AL *src //字节运算时目的操作数用AL, 乘积放在AX中
Word => DX=AX *src //字运算时目的操作数用AX, DX存放乘积的高位字, AX放乘积的低位字
1.目的数必须是累加器 AX 或AL,指令中不需写出
2. 源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数, 而绝对不允许是立即数或段寄存器.
IMUL (sIgned MULtiple) 有符号数乘法指令
IMUL SRC //与MUL指令相同,但必须是带符号数
DIV ( unsigned DIVide) 无符号数除法指令
DIV SRC //Byte/Word 其中: SRC的规定同乘法指令MUL
执行操作:Byte => AX / src //字节运算时目的操作数在AX中,结果的商在AL中 ,余数中AH中
Word=> DX,AX /src //字运算时目的操作数在DX高位字和AX低位字中,结果的商在AX中 ,余数在DX中
存储器操作数必须指明数据类型:BYTE PTR src 或 WORD PTR src
IDIV (sIgned DIVied) 有符号数除法指令
IDIV SRC //Byte/Word 与DIV指令相同,但必须是带符号数
CBW (Convert Byte to Word) 字节转换为字指令
CBW
执行操作: AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH.
CWD (Convert Word to Double word) 字转换为双字指令
CWD
执行操作: AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH.
当计算机进行计算时,必须先把十进制数转换为二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出.
在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD ( Binary Coded Decimal ).
BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD码两种格式表示.
压缩的BCD码用4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串.
非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421的BCD码,而高4位则没有意义.
压缩的BCD码调整指令
DAA (Decimal Adjust for Addition) 加法的十进制调整指令
DAA
执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中.
DAS (Decimal Adjust for Subtraction) 减法的十进制调整指令
DAS
执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并氢结果存放在AL寄存器中.
非压缩的BCD码调整指令
AAA (ASCII Adjust for Addition) 加法的ASCII调整指令
AAA
执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存话在AL寄存器中.
AAS (ASCII Adjust for Subtraction) 减法的ASCII调整指令
AAS
执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并氢结果存放在AL寄存器中
已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/decryption/220.html 欢迎订阅Eddy Blog。