求!一道关于单片机10位十进制加法子程序的编程题,帮帮忙啊

求!一道关于单片机10位十进制加法子程序的编程题,帮帮忙啊,第1张

ORG0000H

MOV 24H, #12H

MOV 23H, #23H

MOV 22H, #34H

MOV 21H, #45H

MOV 20H, #56H 10位十进制加数:1223344556。

MOV 29H, #33H

MOV 28H, #44H

MOV 27H, #55H

MOV 26H, #66H

MOV 25H, #77H 10位十进制被加数:3344556677。

MOV R0, #20H

MOV R1, #25H

MOV R2, #5

CLR C

LOOP:

MOV A, @R0

ADDC A, @R1

DA A

MOV @R0, A

INC R0

INC R1

DJNZ R2, LOOP

SJMP $

END

name change2BTo10D

数据段

data segment

outNum db ?输出数字

msgInput db 'please input the num end with B or b or enter.',0ah,0dh,'[eg:101B]:$'

msgEnd db 0ah,0dh,'press any key to end ...$'

data ends

代码段

code segment

assume ds:data,cs:code,es:data

回车子程序

enter proc

mov dl,0ah

mov ah,2

int 21h

mov dl,0dh

mov ah,2

int 21h

ret

enter endp

输出提示子程序dx

msg proc

mov ah,9

int 21h

ret

msg endp

输出十进制子程序dl

out10B proc

add dl,30h

mov ah,2

int 21h

ret

out10B endp

检查输入al cl=0 失败

check proc

mov cl,0

cmp al,'0'

jb back

cmp al,'1'

ja back

mov cl,1

back: ret

check endp

变化处理子程序

Do2to10 proc

mov cl,0

cmp outNum,40h 0100 0000将溢出7位

ja Dback

shl outNum,1

add outNum,al

mov cl,1

Dback: ret

Do2to10 endp

输出自程序 outNum<=127

cout proc

mov cl,0 计数

mov bl,0 下一位十位是否显示

L100: cmp outNum,100

jb L100Nt <100

add cl,1

mov bl,1

sub outNum,100

jmp L100

L100Nt: cmp cl,0

je L10

mov dl,cl 输出百位

mov cl,0 清计数

call out10B

L10: cmp outNum,10

jb L10Nt <10

add cl,1

mov bl,1

sub outNum,10

jmp L10

L10Nt: cmp bl,1

je L10out 如果百位有则输出十位

cmp cl,0

je L1

L10out: mov dl,cl 输出十位

mov cl,0 清计数

call out10B

L1: mov dl,outNum 输出个位

call out10B

ret

cout endp

输入子程序

input proc

again: mov al,0

mov ah,1 输入的是 ASII

int 21h

cmp al,'B' 结束输入

je inRet

cmp al,'b'

je inRet

cmp al,13

je inRet

call check 检查输入

cmp cl,0

je backsk cl=0失败 忽略当前输入字符

sub al,30h 结果变成数字

call Do2to10

cmp cl,1

je again cl=1 合法且没有结束 下一个输入

inRet: ret

backsk :mov dl,08h

mov ah,2

int 21h

jmp again

input endp

主程序

main: mov ax,data 装载数据

mov ds,ax

mov ax,0

lea dx,msgInput

call msg

mov outNum,0

call input

call enter

call cout

lea dx,msgEnd 退出

call msg

mov ah,1

int 21h

mov ah,4ch

int 21h

code ends

end main

输入的数必须不大于1111 1111 ==>不大于127

写了久才写好,都忘得差不多了,希望你喜欢,同时谢谢你的问题

运行结果

please input the num end with B or b or enter

[eg:101B]:1111

15

press any key to end ...


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

原文地址: http://www.outofmemory.cn/yw/7745929.html

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

发表评论

登录后才能评论

评论列表(0条)

保存