zoukankan      html  css  js  c++  java
  • assembly x86(nasm)子程序1

    • 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
  • 相关阅读:
    ios 写项目的时候遇到的问题及解决方案(1)
    思绪锦集
    iOS学习-----真机测试过程
    StackOverflow程序员推荐的几本书籍
    关于算法学习的重要性
    程序的灵魂-算法
    C++ 之 const 随笔记
    Foundation 框架之——NSString、NSMutableString
    Objective-C之NSString和NSMutableString
    Objective-C之集合对象(NSSet,NSMutableSet,NSIndexSet)
  • 原文地址:https://www.cnblogs.com/lanclot-/p/10986946.html
Copyright © 2011-2022 走看看