![]() |
#2
wandering_x2010-06-27 10:49
这是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 ![]() |
4个32位无符号数相加并将结果显示在屏幕上
学的是微机原理,愣是没有学明白啊,快考试了,大家帮帮忙啊,谁会的给写个程序啊!