微机原理与接口技术汇编子程序涉及
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
试验五汇编子程序设计
一、试验目的
(1)掌握汇编子程序设计的一般方法;
(2)掌握汇编子程序的调试方法;
(3)掌握递归子程序设计与调试方法。
二、输入输出子程序
1、十进制数输入子程序decibin
子程序名:decibin
子程序功能:用户输入十进制数放在BX中
入口参数:无
出口参数:BX存放输入的十进制数
受影响的寄存器:AX、BX、CX、DX和标志寄存器
注意:①用户输入字符‘0’~‘9’,当输入非法字符时结束输入,如回车;
②十进制数位数可以是1位、2位等,范围0~65535。
decibin proc near
mov bx , 0
newchar: mov ah , 1
int 21h
mov dl , al
sub al , 30h
jl exit1
cmp al , 9
jg exit1
cbw
xchg ax , bx
mov cx , 10
mul cx
xchg ax , bx
add bx , ax
jmp newchar
exit1: ret
decibin endp
2、十六进制数输入子程序hexibin
子程序名:hexibin
子程序功能:用户输入十六进制数放在BX中
入口参数:无
出口参数:bx存放输入的十六进制数
受影响的寄存器:ax、bx、cx和标志寄存器
注意:①用户输入0ah~0fh的数字时,输入大写字母‘A’~‘F’,小写字母‘a’~‘f’无效;
②子程序不能控制数的位数可能0位、1位、2位……等位数,如果输入位数大于4位,则以最新的4位十六进制数为准;
③输入字符可以按回车结束,当输入任何非法字符时也能结束数据输入。
hexibin proc near
mov bx , 0
newchar: mov ah , 1
int 21h
sub al , 30h
jl exit
cmp al , 10
jl add_to
sub al , 7
cmp al , 0ah
jl exit
cmp al , 10h
jge exit
add_to: mov cl , 4
shl bx , cl
mov ah , 0
add bx , ax
jmp newchar
exit: ret
hexibin endp
3、十进制数显示子程序binidec
子程序名:binidec
子程序功能:将bx寄存器存放的数以十进制的形式显示出来
入口参数:bx存放要显示的数
出口参数:无
受影响的寄存器:ax、bx、cx、dx和标志寄存器
binidec
dec_div
图5-1 子程序binidec模块层次图
binidec proc near
mov cx , 10000
call dec_div
mov cx , 1000
call dec_div
mov cx , 100
call dec_div
mov cx , 10
call dec_div
mov cx , 1
call dec_div
ret
binidec endp
dec_div proc near
mov ax , bx
mov dx , 0
div cx
mov bx , dx
mov dl , al
add dl , 30h
mov ah , 2
int 21h
ret
dec_div endp
4、十六进制数显示子程序binihex
子程序名:binihex
子程序功能:将di寄存器存放的数以十六进制的形式显示出来
入口参数:di存放要显示的数
出口参数:无
受影响的寄存器:ax、bx、cx、dx和标志寄存器
注意:显示十六进制数用到字符‘0’~‘9’和字符‘A’~‘F’,没有用到字符‘a’~‘f’。
binihex proc near
mov bx , 4
lp: mov cl , 4
rol di , cl
mov dx , di
and dl , 0fh
cmp dl , 9
jbe next
add dl , 07h
next: add dl , 30h
mov ah , 2
int 21h
dec bx
jnz lp
mov dl , 'h'
mov ah , 2
int 21h
ret
binihex endp
5、二进制数显示子程序binshow
子程序名:binshow
子程序功能:将bx寄存器存放的数以二进制的形式显示出来入口参数:bx存放要显示的数
出口参数:无
受影响的寄存器:ax、bx、cx、dx和标志寄存器
binshow proc near
mov ah , 2
mov cl , 16
Again: shl bx , 1
jnc next
mov dl , '1'
push ax
int 21h
pop ax
jmp mm
Next: mov dl , '0'
push ax
int 21h
pop ax
mm: dec cl
jnz again
ret
binshow endp