美文网首页
汇编实现十六进制打印内存空间为0:0开始的十六个字节的内容

汇编实现十六进制打印内存空间为0:0开始的十六个字节的内容

作者: wcry | 来源:发表于2019-06-28 00:11 被阅读0次

    以十六进制打印内存当中的数据具体思路是:

    1. 把内存中数据先取出;
    2. 将取出的数值,转换为字符;
    3. 判断是该字符表示的是数,还是字母;
    4. 进行相关处理,然后以字符形式打印。
      具体代码如下:
    code segment
    start:
        mov ax,0
        mov ds,ax
        mov bx,0
        mov cx,16
        s:
            call tran
            inc bx
        loop s
        mov ax,4c00h
        int 21h
    tran:
        push cx
        mov dl,[bx]
        mov cl,4
        shr dl,cl
        and dl,0fh
        call num_char
        mov dl,[bx]
        and dl,0fh
        call num_char
        pop cx
    ret
    num_char:                           ;判断
        push ax
        mov ah,2
        add dl,'0'
        cmp dl,'9'
        jna print
        add dl,7
        print:                              ;打印
        int 21h
        pop ax
    ret
    code ends
    end start
    

    说明:当取出数据时,我们先要将十六进制数据转换为字符,可以add dl,'0'或者是add dl,30h,但是,无法表示A、B、C、D等,所以这个时候要进行判断,如果这个数字小于'9'即小于39h就说明这是一个数,如果大于就表示一个字母,对于字母要进行的处理就是add dl,7

    知识点:

    1. 将一个数值转换为一个字符,只需要加上'0'
    2. 判断十六进制数,使用cmp即可
    3. jna表示不大于,即小于等于,jnb表示不小于,即大于等于
    4. 当是字母时,加上'0'得到它的ASII码,但并不是其本身,还需要加上7;如E表示14,加上'0'是3Eh,但是E的ASII码是45,加上7就是它真实的ASII码。

    相关文章

      网友评论

          本文标题:汇编实现十六进制打印内存空间为0:0开始的十六个字节的内容

          本文链接:https://www.haomeiwen.com/subject/qgkjcctx.html