汇编语言 求高手完成这个加法程序

汇编语言 求高手完成这个加法程序,第1张

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

subs_c: ;[原创]多位加法核心子程序

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

以上就是关于汇编语言 求高手完成这个加法程序全部的内容,包括:汇编语言 求高手完成这个加法程序、求用汇编语言编写一个实现任意两个五位数相加的程序、关于汇编语言的加法问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9433399.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存