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

我的博客

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

[2010-09-06 12:58] 习题4.14

按要求分别编写下列子程序:把16位有符号二进制数转换成对应十进制ASCII码串。

答:
;-----------------------------------------------------
assume        cs:code,ds:data,ss:stack
data        segment
num        dw        1111111111111110b
msg        db        5 dup (0)
data        ends
stack        segment stack
        dw 128 dup (0)
stack        ends
code        segment
start:
        mov ax,data
        mov ds,ax

        push num        ;利用堆栈传递入口参数,
        call suba       ;出口参数为存储器单元msg
        add sp,2        ;主程序平衡堆栈

        push num        ;利用堆栈传递入口参数
        call subb       ;出口参数为存储器单元msg
                        ;子程序平衡堆栈

        push ds         ;利用堆栈传递入口参数  
        push num        ;出口参数为存储器单元msg
        call subc       
        add sp,4        ;堆栈由主程序平衡
        
        push ds         ;利用堆栈传递入口参数   
        push num        ;出口参数为存储器单元msg
        call subd       ;堆栈由子程序平衡
        
        mov ah,4ch
        int 21h
;
suba        proc near        ;段内近转移
        push bp          ;保存基址指针
        mov bp,sp
        mov ax,[bp+4]    ;入口参数赋值给AX
        neg ax           ;去补码
        call conv        
        pop bp           ;恢复基址指针
        ret
suba        endp
;
subb        proc near        ;段内近转移
        push bp
        mov bp,sp
        mov ax,[bp+4]
        neg ax
        call conv
        pop bp
        ret 2            ;平衡堆栈
subb        endp
;
subc        proc far         ;段间远转移
        push bp
        mov bp,sp
        mov ax,[bp+6]
        neg ax
        call conv
        pop bp
        ret
subc        endp
;
subd        proc far          ;段间远转移
        push bp
        mov bp,sp
        mov ax,[bp+6]
        neg ax
        call conv
        pop bp
        ret 4             ;平衡堆栈
subd        endp
;
conv        proc              ;转换子程序
        mov bx,10
        mov si,offset msg
        xor dx,dx
s:        cmp ax,10
        jl ok
        div bx
        mov [si],dl
        inc si
        xor dx,dx
        jmp short s
ok:        mov [si],al
        ret
conv        endp
;
code        ends
end        start
;-----------------------------------------------------
评论次数(0)  |  浏览次数(308)  |  类型(汇编习题集) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码