显示和debug中一样的输出效果;输出16进制
assume cs:code,ss:stack,ds:data
data segment
ARRAY db 87h,99h,0ah,0cdh,0DCH
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128 ;初始化栈
call init_reg
call show_byte
mov ax,4c00h
int 21h
;=================================
show_byte:
mov si,OFFSET ARRAY ;ds:offset array
mov di,160*10+30*2
mov cx,5
showByte:
mov al,ds:[si] ;从第一个字符开始读取
call show_hex ;调用 显示
inc si
loop showByte
ret
;=========================================================
show_hex:
jmp showHex
number db '0123456789abcdef'
showHex:
mov ah,al ;找字符和表的对应关系;第一次al = 87h,放入ah中
and al,00001111B ;al中存放低4位,也就是7的位置。
shr ah,1
shr ah,1
shr ah,1
shr ah,1 ;ah存放高四位
mov bx,0 ;开始使用直接定址表
mov bl,al
mov al,cs:number[bx] ;找到al
mov bl,ah
mov ah,cs:number[bx] ;找到ah
mov es:[di],ah ; 先显示高位字符,再显示低位字符
mov word ptr es:[di+1],00000010B
mov es:[di+2],al
mov word ptr es:[di+3],00000010B
add di,6 ;
ret
;=======================================================
;初始化
init_reg:
mov bx,0b800h
mov es,bx
mov bx,data
mov ds,bx
ret
code ends
end start