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

2019-06-28  本文已影响0人  wcry

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

  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码。
上一篇下一篇

猜你喜欢

热点阅读