用汇编语言编写一段程序实现两个六位的十进制数的加法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用汇编语言编写一段程序实现两个六位的十进制数的加法,把运算结果显示在屏幕上stack segment para stack 'stack'

st1 db 64 dup(?)

stack ends

data segment

num equ 6 ;数字位数(最好为偶数),若为奇数需稍微改动程序

msg1 db 'Enter the first number(ESC to exit) : ','$'

msg2 db 'Enter the second number(ESC to exit) : ','$'

msg3 db 0dh,0ah,'ERROR! Enter again(ESC to exit) : ','$'

num1 db num dup(0) ;存第一个数

num2 db num dup(0) ;存第二个数

res db 0dh,0ah,'The resust is : ','$'

data ends

output macro abyt

push ax

mov dl, abyt

mov ah, 02h

int 21h

pop ax

endm

code segment

assume ss:stack,ds:data,cs:code

main proc far

mov ax, data

mov ds, ax

again:

lea dx, msg1

mov ah, 09h

int 21h ;提示输出第一个数

lea bx, num1

call input ;调用输入

output 0dh ;回车,换行

output 0ah

lea dx, msg2

mov ah, 09h

int 21h ;提示输入第二个数

lea bx, num2

call input

output 0dh ;回车,换行

output 0ah

mov si, 0 ;SI清零

mov ax, 0

L2: lea bx, num1 ;读取第一个数列

mov al, [bx][si]

mov ah, 0

lea bx, num2

add al, [bx][si] ;读取第二个数列

aaa ;BCD矫正

add al, 30h ;变成ASCII码

mov cl, al

inc si

lea bx, num1

mov al, [bx][si] ;第二个数列

add al, ah

mov ah, 0

lea bx, num2

add al, [bx][si]

aaa

add al, 30h

mov ch, al

push cx ;结果放入堆栈,等待输出inc si

cmp si, num-1 ;循环,读完所有数jb l2

mov ch, ah

lea dx, res

mov ah, 09h

int 21h

add ch, 30h

output ch

mov al, 0

outl: ;输出结果循环

pop cx

output ch

output cl

inc al

cmp al, num/2

jb outl

quit: ;退出

mov ah, 4ch

int 21h

main endp

input proc near ;输入之程序start:

mov di, num

l1:

mov ah, 01H ;输入

cmp al, 1bh ;ESC退出

jz quit

cmp al, 30h ;(数字)?继续:退出jb error

cmp al, 40h

ja error

sub al, 30h

dec di

mov [bx][di],al ;存入数据

cmp di, 0

ja l1 ;循环

ret

error: ;输入错误支路

lea dx, msg3

mov ah, 09h

int 21h

mov di, num

jmp start

input endp

code ends

end main

相关文档
最新文档