assume cs:code, ds:data, ss:stack
data segment
ARRAY db 3DH, 0FFH, 5BH, 7CH, 21H
NUMBER db '0123456789ABCDEF'
data ends
stack segment
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, 0
mov ax, 0
mov cx, 5
showHex: mov al, ds:[si]
call show_hex
inc si
add di, 6
loop showHex
ret
;==============================================
show_hex:
mov ah, al
and al, 00001111B
shr ah,1
shr ah,1
shr ah,1
shr ah,1
mov bx, 0
;把数字转换为字符
mov bl, al
mov al, ds:NUMBER[bx]
mov bl, ah
mov ah, ds:NUMBER[bx]
mov es:[di],ah
mov es:[di+2], al
ret
;===============================================
init_reg:
mov bx, 0B800H
mov es, bx
mov di, 160*4 + 40
mov bx, data
mov ds, bx
ret
code ends
end start
示例2
assume cs:code, ds:data, ss:stack
data segment
db 128 dup(0)
data ends
stack segment
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
call init_reg
call show_sin
mov ax, 4C00H
int 21H
;===================================================
show_sin: jmp showSin
degree0 db '0',0
degree30 db '0.5',0
degree60 db '0.866',0
degree90 db '1',0
degree120 db '0.866',0
degree150 db '0.5',0
degree180 db '0',0
; 存放地址,很像c语言中的指针,存放变量的地址
ADDRESS_DEGREE dw OFFSET degree0
dw OFFSET degree30
dw OFFSET degree60
dw OFFSET degree90
dw OFFSET degree120
dw OFFSET degree150
dw OFFSET degree180
showSin:
mov ax, 60
mov dx, 0
mov bx, 30
div bx
mov bx, ax
add bx, bx
mov si, cs:ADDRESS_DEGREE[bx]
call show_string
ret
;===================================================
show_string:
push dx
push si
push di
push es
showString: mov dl, ds:[si]
cmp dl, 0
je showStringRet
mov es:[di], dl
add di,2
inc si
jmp showString
showStringRet:
pop es
pop di
pop si
pop dx
ret
;===================================================
init_reg: mov ax, 0B800H
mov es, ax
mov di, 160*10+40
mov ax, cs
mov ds, ax
ret
code ends
end start