这是2个的相加,四个的我在后面在加了2个数,就是通不过啊,汇编没学懂,短程序看着都朦胧,长的就没有希望了啊!
DATA
SEGMENT
NUM1
DD
01234567H
; 定义第一个32位数,存放顺序:67H,45H,34H,01H
NUM2
DD
89ABCDEFH
; 定义第二个32位数,存放顺序:0EFH,0CDH,0ABH,89H
NUM3
DD
NUM4
DD
RESULT
DD
(?)
; 定义结果单元
DATA
ENDS
STACK
SEGMENT
PARA STACK
'STACK'
DB
100 DUP(?)
STACK
ENDS
CODE
SEGMENT
ASSUME
CS: CODE,DS:DATA,SS:STACK
START
PROC
FAR
BEGIN:
PUSH
DS
MOV
AX,0
PUSH
AX
MOV
AX, DATA
MOV
DS, AX
MOV
BX, OFFSET NUM1
MOV
AX, [BX]
; 取第一个数的低字(4567H)
PUSH
AX
; 压入堆栈
MOV
AX, [BX+2]
; 取第一个数的高字(0123H)
PUSH
AX
; 压入堆栈
MOV
AX, [BX+4]
; 取第二个数的低字(0CDEFH)
PUSH
AX
; 压入堆栈
MOV
AX, [BX+6]
; 取第二个数的高字(89ABH)
PUSH
AX
; 压入堆栈
MOV
AX, [BX+8]
PUSH
AX
MOV
AX, [BX+10]
PUSH
AX
MOV
AX, [BX+12]
PUSH
AX
MOV
AX, [BX+14]
PUSH
AX
CALL
ADDPROC
; 调用过程
MOV
BX, OFFSET
RESULT
; 保存结果
MOV
[BX], AX
MOV
[BX+2], DX
RET
START
ENDP
ADDPROC
PROC
; 32位无符号数相加的过程
PUSH
BP
; 保护BP
MOV
BP, SP
; 将当前的堆栈指针SP送BP
MOV
AX, [BP+10]
; 取第一个数的低字(最先压栈的数)
MOV
DX, [BP+8]
; 取第一个数的高字
ADD
AX, [BP+6]
; 与第二个数的低字相加
ADC
DX, [BP+4]
; 与第二个数的高字相加,并考虑低字相加的进位
POP
BP
; 恢复BP
RET
8
; 返回,并使SP再加8,以丢弃堆栈中参数
ADDPROC
ENDP
CODE
ENDS
END
BEGIN