这是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