汇编语言程序设计——模块与子程序例1

汇编语言程序设计——模块与子程序例1

重点:子程序结构,子程序的调用与返回

设计目标

多次输入一个 65535 以内的十进制数并以十六进制显示出来。按 ESC 键结束。

设计思路

(1)设主程序标号 LET0,一个子程序标号为 LET1,另一个子程序标号 LET2;

(2)主程序是一个死循环,只有当按下 ESC 键时才能退出、结束程序;

(3)子程序 LET1 功能为键盘输入,并把输入的数字变为十进制数,保存在 X 单元;

(4)子程序 LET2 功能为通过查表将 X 单元中的数值用十六进制显示出来。

程序框图:

7-1.asm

;7-1.asm  用子程序多次输入一个65535以内的十进制数并以十六进制显示出来。按ESC键结束
data segment
	x dw 0
	mess1 db 0dh,0ah,'input dec=$'
	mess2 db 0dh,0ah,'out HEX=$'
	hex db '0123456789ABCDEF'
data ends
code segment
	assume cs:code,ds:data
start:
	mov ax,data
	mov ds,ax
;主程序
let0: mov x,0
	mov dx,offset mess1 ;显示提示1
	mov ah,9
	int 21h
	call let1           ;调用子程序1
	call let2           ;调用子程序2
	jmp let0
;子程序1:键盘输入、形成十进制数x
let1: 
	mov ah,1             ;键盘输入十进制数
	int 21h
	cmp al,27            ;是ESC键?
	jz out1
	sub al,30h           ;其它字符? 30H=48 
	jl exit              ;是,ASCII小于48为其他字符,转exit
	cmp al,9             ;大于9为其他字符
	jg exit    			 ;转exit
	
	mov ah,0        
	xchg ax,x          ;形成十进制数
	mov cx,10
	mul cx             ;(AX)<-(AL)*(CX) 
	add x,ax           ;相加并保存
	jmp let1
exit: ret             ;ret返回主程序
;子程序2:查表,显示十六进制
let2: 
    mov dx,offset mess2         ;显示提示2
	mov ah,9
	int 21h
	
	mov bx,x             ;将x→bx
	mov ch,4
	mov cl,4             ;将bx中的二进制数循环左移4位(十六进制数循环左移1位)
rept1:
	rol bx,cl          ;例如0021→0210→2100→1002→0021
	mov ax,bx                        
	and ax,000fh           ;保留最低4位
	mov si,ax
	mov dl,hex[si]           ;查表显示十六进制数
	mov ah,2
	int 21h
	dec ch                 ;显示下一位
	jnz rept1
	ret                  ;返回主程序
out1: 
	mov ah,4ch
	int 21h
code ends
end start

运行结果:

分析程序得知, 子程序调用 CALL 指令应该和子程序返回 RET 指令成对出现,使用了 CALL 指令,子程序中一定要有 RET 返回指令。本例中程序结构清晰,各个子程序功能相对独立,程序运行灵活。

参考书籍:《汇编语言(第 2 版)》郑晓薇 编著,机械工业出版社

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值