如果要编整个汇编程序,废话不多说,先写上每个程序必有的框架:
data segment
; 定义数据
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
;-----
; 这里写主程序,可用call phex来调用子程序phex
;-----
mov ah,4ch
int 21h
phex proc
; 这里写子程序
ret
phex endp
code ends
end start
p161 例5-1 以16进制形式输出bx寄存器中的数
data segment
dat dw 0a1b2h ; 16位数
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
;-----
mov bx,dat ; 传参给bx
call phex
;-----
mov ah,4ch
int 21h
; 以16进制输出bx中的16位数
phex proc
mov ch,4
mov cl,4
lop:
rol bx,cl ; 循环左移4位,当前最高4位移至最低4位
mov al,bl ; 暂存至al
and al,0fh ; 只取最低4位
add al,30h ; 数字->ASCII码
cmp al,39h ; 判断是否在数字的ASCII码范围内(数字9的ASCII码是39h)
jbe print ; <=39h则跳转到分支结构print
add al,7 ; 否则+7得到表示16进制的字母的ASCII码(字母A的ASCII码是41h)
print:
mov dl,al
mov ah,2 ; 输出dl的ASCII码表示的字符
int 21h
dec ch ; ch--,同时置标志位
jnz lop ; ch!=0则继续循环
mov dl,0ah ; 换行的ASCII码是0ah
mov ah,2 ; 输出换行
int 21h
ret
phex endp
code ends
end start
Comments | NOTHING