汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-09-03 22:19] 习题3.36

设已在地址F000:0000H开始的内存区域安排了100个字节的无符号8位二进制数。请编写程序求他们的和,并转换成十进制显的ASCII码串显示。

答:
;-----------------------------------------------------
assume  cs:code,ss:stack
stack   segment stack               ;程序需要,故
        dw 128 dup (0)              ;定义栈段。
stack   ends
code    segment
start:
        mov ax,0F000h               ;数据首地址F000
        mov ds,ax                   ;
        xor ax,ax                   ;累加器清零
        xor bx,bx                   ;暂存被加数
        mov si,0                    ;首地址
        mov cx,100
L:      mov bx,[si]                 ;
        and bx,0ffh                 ;高8位清零
        add ax,bx                   ;累加
        inc si                      ;指向下一个数值
        loop L

        mov bx,10                   ;除数
        mov cx,0                    ;计数器清零
L1:
        div bx                      ;AX/10
        push dx                     ;余数入栈
        inc cx                      ;计数器增量
        xor dx,dx                   ;高16位清零
        cmp ax,10                   ;检查被除数是否
        ja next                     ;大于10
        jmp ok
next:   jmp L1                      ;大于10,继续除
ok:     push ax                     ;小于10,结束
        inc cx                      ;
L2:     pop dx                      ;从栈中依次取出
        add dx,3030h                ;余数并打印出来
        and dx,0ffh                 ;清楚高8位
        mov ah,2
        int 21h
        loop L2

        mov ah,4ch                  ;程序结束
        int 21h
code    ends
end     start
;-----------------------------------------------------
评论次数(0)  |  浏览次数(294)  |  类型(汇编习题集) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码