题目:
基于8088、8086指令系统完成以下编程:
1、只使用16位的寄存器,实现32位十六进制数的加法运算
2、加数NUM1和被加数NUM2请预先在数据段定义并初始化
3、加法结果请保存至数据段预先定义的变量RESULT
4、请将程序书写完整
5、尽量上机调试通过
;本程序将利用16bit数相加的方式计算两个32bit数NUM1和NUM2的和,并将结果存入变量RESULT
;AUTHOR DragonShard
;DATE 2005年3月31日
DATAS SEGMENT
NUM2 DD 010101212H
NUM1 DD 0FAFAFBFBH
RESULT DD ?
GJW DW ? ;这里存储的是高16位进位
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
;initialize the programme
MOV AX,DATAS
MOV DS,AX
LEA SI, NUM1
MOV AX, [SI] ;将变量NUM1的低16位存入AX
MOV CX, [SI+2] ;将变量NUM1的高16位存入CX
LEA SI, NUM2
MOV BX, [SI] ;将变量NUM2的低16位存入BX
MOV DX, [SI+2] ;将变量NUM2的高16位存入DX
ADD AX, BX ;将NUM1和NUM2的低16位相加,结果存入AX
ADC CX, DX ;将NUM1和NUM2的高16位相加并加上低16位的进位,结果存入CX
LEA DI, RESULT
MOV [DI],AX
MOV AX, 0000H ;将AX和BX变为0,以便存储高16位的进位
MOV BX, 0000H
ADC AX, BX ;将高16位进位存入AX
MOV [DI+2], CX
MOV [DI+4], AX
CODES ENDS
END START