首页 > 其他 > 详细

assembly x86(nasm)子程序1

时间:2019-06-06 21:40:18      阅读:100      评论:0      收藏:0      [点我收藏+]
  • T:
  • 将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。
  • 思路:
  • Main主调程序,循环调用HEXAC子程序10次
  • HEXAC子程序,将十六进制数,除以16分解成两个独立部分,再利用数据结构堆栈的后进先出的性质来调整顺序,同时进行转码。
  • DISP子程序,起显示作用。

 

  • 问题:子程序中对栈的使用需要小心,一个子程序push后,在return之前必须有对应的pop,要不然子程序无法返回。

技术分享图片

 

代码如下:

data    segment
message        db    Binary to hexadecimal,0dh,0ah,Press any key to continue!,0dh,0ah,$
buf1        db  4eh,0ch,37h,04h,7dh,60h,21h,33h,44h,55h
buf2        db    00h  $
data    ends
code    segment
assume    cs:code,ds:data
;---------------------------------------------------------------------------------------------------------------------
main proc        far
start:        mov    ax,data
            mov    ds,ax            
            lea dx,message    
            mov    ah,9                        
            int    21h
            mov cx,10
loopa:        
            call HEXAC
            loop loopa
exit:        mov    ah,4ch                        
            int    21h
main endp
;---------------------------------------------------------------------------------------------------------------------
HEXAC    proc    near                ;码型转换子程序
            mov al,buf1[si]
            push cx
            push si
            mov si,2
            xor cx,cx
            cbw
loopb:
            xor dx,dx
            inc cl
            mov bx,16
            div bx                    ;ax商,dx余
            push dx                    ;余数入栈
            cmp ax,0
            jne loopb
            mov buf2[0],0
            sub si,cx
loopc:
            pop dx
            cmp dl,9
            jna change
            add dl,55
            mov buf2[si],dl
            jmp next
change:        or  dl,00110000b
            mov buf2[si],dl
next:        inc si
            loop loopc
            pop si
            inc si
            pop cx
            call DISP
            ret
HEXAC endp
;---------------------------------------------------------------------------------------------------------------------
DISP    proc    near                ;显示子程序
            lea dx,buf2
            mov ah,9
            int 21h
            ret
DISP endp
;---------------------------------------------------------------------------------------------------------------------
code    ends
end    start

 

assembly x86(nasm)子程序1

原文:https://www.cnblogs.com/lanclot-/p/10986946.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!