汇编累加求和 怎么输出多位数的结果

_zyw_- 2014-06-07 05:35:49
由于学习汇编时间不久,所以对于其中的数据的存储以及输出不太清楚
希望得到一些指点

这是根据网上一个例子自己写的程序
但就是不能把两数相加的和给输出来
数字的格式是压缩BCD码

data segment
cj dw 2 dup(?)
sum dw ?
aver dw ?
temp dw ?
A db 'Please input number:',"$";提示语句
B db 0DH,0AH,"$";换行
data ends

code segment
assume cs:code,ds:data

start:
;************输入20个学生的成绩(0~99)*****
mov ax,data ;把数据段的内容送到AX中
mov ds,ax ;让ds指向AX
mov si,0 ;初始化SI
;---------------------------------------
mov cx,2 ;循环次数为20
L1: mov ah,9
lea dx,A
push cx ;将CX寄存器内的数据置于堆栈内
int 21h ;提示语句
;---------------------------------------
mov bx,0
mov ah,1
int 21h ;输入十位数
mov cl,4
shl al,cl ;AL中的数据左移四位,使AL中低四位为0
mov bl,al ;把十位数字送到bl中


mov ah,1
int 21h ;输入个位数
and al,0Fh ;使AL高四位置零

add al,bl ;得到压缩BCD码

pop cx ;将堆栈内的数据取出,放回cx中
;----------------------------------------

mov [si],al ;将输入的数据送到cj中
add si,2 ;偏移地址加二(DW)

lea dx,B ;换行
mov ah,9
int 21h
LOOP L1


;**************求平均成绩****************
mov si,0 ;初始化SI
mov cx,2 ;循环20次
mov ax,0 ;初始化AX


mov al,[si] ;把SI指向的数据送到al中
cbw ;字节转换为字,即8位变16位,以保证数据足够储存
L2:add si,2
add ax,[si]
;cbw
daa ;压缩BCD码的加法调整
LOOP L2

lea bx,sum
mov [bx],ax


mov ah,04ch
int 21h

code ends
end start
...全文
476 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
_zyw_- 2014-06-09
  • 打赏
  • 举报
回复
谢谢,虽然我已经知道了
zara 2014-06-09
  • 打赏
  • 举报
回复
压缩 BCD 码的显示输出,这个还是比较简单的吧:
; ....
lea bx,sum
mov [bx],ax
push ax
mov cl, 4
shr al, cl
and al, 0fh
or al, 30h
mov dl, al
mov ah, 2
int 21h
pop ax
and al, 0fh
or al, 30h
mov dl, al
mov ah, 2
int 21h

mov ah,04ch
; ....

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧