DATAS SEGMENT
d1 db '5','4','6','7','8'
d2 db '6','3','7','9','4'
s1 db 6 dup()
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov si,offset s1
mov di,offset d2
mov BX,offset d1
mov cx,5
next:
mov DH,[Bx]
add DH,[di]
sub DH,60H
mov [si],DH
INC BX
INC DI
INC SI
loop next
MOV SI,OFFSET S1
MOV DL,30H
MOV DH,[SI]
CMP DH,10
JB SMDHL
SUB DH,10
ADD DL,1
CALL PRINT
SMDHL:
MOV DL,DH
ADD DL,30H
INC SI
MOV CX,4
NEXT2:
MOV DH,[SI]
CMP DH,10
JB SMDHL2
SUB DH,10
ADD DL,1
CALL PRINT
JMP ABOVE
SMDHL2:
CALL PRINT
ABOVE:
MOV DL,DH
ADD DL,30H
INC SI
LOOP NEXT2
CALL PRINT
MOV AH,4CH
INT 21H
PRINT PROC NEAR
MOV AH,02H
INT 21H
RET
PRINT ENDP
CODES ENDS
END START
输出结果:118472
编程前,应把算法先想清楚了。
code segment;任意两个五位数相加
assume cs:code,ds:code,ss:code
org 100h;标准COM格式
start:
jmp begin
Tips db 0dh,0ah,09,' $'
X1 db '23456+98765='
Y1 db '000000 Esc to Quit',24h
begin:
push cs
pop ds
push ds
pop es
mov ax,3;文本模式
int 10h
Again:mov dx,offset Tips;提示
mov ah,9
int 21h
call input;接收任意两个五位数
call count;求和
; 输出十进制的结果
mov dx,offset Y1[-1]
mov ah,9
int 21h
mov ah,0;暂停
int 16h
cmp ah,01;Esc 退出
jnz Again;计算下一题
mov ah,4ch;结束
int 21h
input:cld
mov si,offset X1
mov cx,2
T0:push cx
mov cx,5
T1:mov ah,0;接收数字
int 16h
cmp al,30h;数据校验
jb T1
cmp al,39h
ja T1
mov ah,0eh;数据显示
int 10h
mov [si],al;存入数据区
inc si
loop T1
inc si;跳过加号
pop cx
cmp cx,2
jnz T2
mov ax,0e2bh;输出加号
int 10h
T2:loop T0
ret
count:mov si,offset X1[4]
mov di,offset Y1[5]
xor dx,dx;清进位
mov cx,5;改变此值,可实现超大数相加
T3: call subs_c;逐位累加
dec si
dec di
loop T3
cmp dl,1;校正最高位
jnz T4
or dl,30h
mov [di],dl;有进位,置1
jmp T5
T4: mov byte ptr [di],20h;去掉前导0
T5: ret
mov al,[si];最低位对齐
mov ah,[si+6]
and ax,0f0fh
add al,ah;自加
add al,dl;加后面进位
aam;二化十
mov dl,ah;存进位位
or al,30h
mov [di],al;保存1位和值
ret
code ends
end start
实际问题出在这句
mov ah,9
int 21h
这句会将返回码(24H)存在al中替换你输入的数据
你这个程序中
mov dh,al
mov cl,4
shr al,cl
or al,30h
mov dl,al
mov ah,2
int 21h
and dh,0fh
or dh,30h
mov dl,dh
int 21h
这段代码太容易处BUG,建议按别的思路重写一个
给你一个以前写的一个N个四位十进制数相加程序。你自己看看能不能给你些启示吧。
ORG 0000H
AJMP START
ORG 0100H
START:
MOV R3,#10H
MOV R0,#20H
MOV A ,#00H
LOOP1: MOV @R0,A
INC R0
DJNZ R3,LOOP1
MOV DPTR,#00H
MOVX A,@DPTR
MOV R3,A
MOV DPTR,#8500H
LOOP2: MOV R0,#20H
CLR A
MOVC A,@A+DPTR
MOV R1,A
CLR A
INC DPTR
MOVC A,@A+DPTR
MOV R2,A
CLR A
MOV A,@R0
ADD A,R1
DA A
MOV @R0,A
INC R0
CLR A
MOV A,@R0
ADDC A,R2
DA A
MOV @R0,A
INC R0
MOV A,@R0
ADDC A,#00H
MOV @R0,A
INC DPTR
DJNZ R3,LOOP2
HERE: SJMP $
END
以上就是关于汇编语言 求高手完成这个加法程序全部的内容,包括:汇编语言 求高手完成这个加法程序、求用汇编语言编写一个实现任意两个五位数相加的程序、关于汇编语言的加法问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)