当前位置: 代码迷 >> 汇编语言 >> 汇编累加求和 如何输出多位数的结果
  详细解决方案

汇编累加求和 如何输出多位数的结果

热度:309   发布时间:2016-05-02 04:34:23.0
汇编累加求和 怎么输出多位数的结果
由于学习汇编时间不久,所以对于其中的数据的存储以及输出不太清楚
希望得到一些指点

这是根据网上一个例子自己写的程序
但就是不能把两数相加的和给输出来
数字的格式是压缩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
------解决方案--------------------
压缩 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
; ....

  相关解决方案