汇编累加求和 怎么输出多位数的结果
由于学习汇编时间不久,所以对于其中的数据的存储以及输出不太清楚
希望得到一些指点
这是根据网上一个例子自己写的程序
但就是不能把两数相加的和给输出来
数字的格式是压缩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