用寄存器传递参数
例
从键盘输入一个十进制数(小于65536的正数),显示出该数的16进制形式
算法分析:两步实现,1.把十进制转化为二进制,2.把二进制转化为十六进制,两步可分别用子程序实现,dtoh子程序把十进制变成二进制,btoh子程序把二进制用十六进制显示,bx寄存器用于在子程序间传递参数,为避免显示重叠,用crlf子程序实现输出回车换行
dtohex segment
assume cs:dtohex
main proc far //调用与dos系统不在一个段地址的主程序,与main endp对应
push ds //程序加载后ds存放程序所在内存的段地址,该内存的前256字节存放程序段前缀psp(dos执行程序时建立的信息块)
xor ax,ax
push ax //这三条语句为ret做准备,ret即执行pop ip, pop cs,执行完ip的值为0,cs的值为ds。程序转移到程序PSP的起始地址,起始地址的前两个字节放的是int 20指令,用于返回DOS
call dtob //十进制数键盘输入并整合为二进制
call crlf //输出回车并换行
call btoh //二进制转为十六进制显示
ret //返回dos
main endp //主程序结束
dtob proc near //十进制转二进制子程序
mov bx,0
input:mov ah,1 //键盘输入,字符输入到al
int 21h
sub al,30h //把输入的ascii码转为数值,30h即为48
jl exit //和0比较,小于0跳转
cmp al,9 //和9比较,大于9跳转
jg exit //不是数则退出
cbw //字节型扩展为字型,8位扩展为16位,将AL的最高有效位D7扩展至AH&#