一,算术运算的数据类型
二,算术运算指令对标志位的影响
三,二进制运算指令
1,加法指令
1)不带进位加法指令ADD(ADDition)
格式:ADD DST,SRC
操作:
将目的操作数和与源操作数相加,将结果送给目的操作数//DST <= DST+SRC
寻址方式:
SRC可以是data/MEM/REG
DST可以是MEM/REG
两者不可同时为MEM
不允许段寄存器参与运算
对状态位的影响:
全部影响
b,带进位加法指令ADC(ADdiion with Carry)
格式:ADC DST,SRC
操作:将目的操作数和与源操作数相加,再加上进位标志CF,将结果送给目的操作数 //DST <= DST+SRC+CF
寻址方式:
SRC可以是data/MEM/REG
DST可以是MEM/REG
两者不可同时为MEM
不允许段寄存器参与运算
对状态位的影响:
全部影响
c,加1指令(INCrement by 1)
格式:INC DST
操作:将目的操作数加1,结果送回目的操作数 //DST <= DST +1
寻址方式:
DST可以是MEM/REG
不可以是data/SEG
对状态位的影响:
除了CF,其他全部影响
例, 计算两个多字节十六进制数之和:3B74AC60F8H+20D59E36C1H=?
式中被加数和加数均有5个字节,可以编一个循环程序实现以上运算。假设已将被加数和加数分别存入从DATA1和DATA2开始的两个内存区,且均为低位字节在前,高位字节在后,如图4.15所示。要求相加所得结果仍存回以DATA1为首址的内存区。
程序流程图如下图,程序如下:
MOV CX,5 ;设置循环次数
MOV SI,0 ;置位移量初值
CLC ;清进位CF
LOOPER:MOV AL,DATA2[SI] ;取一个加数
ADC DATA1[SI],AL ;和一个被加数相加
INC SI ;位移量加1
DEC CX ;循环次数减1
JNZ LOOPER ;加完否,若没完,转LOOPER,继续相加
HLT ;程序暂停