汇编语言:把AX中的数以二进制、十六进制、有符号整数形式输出显示(子程序设计)

1.子程序的结构

汇编语言中的子程序通常具有以下结构:

子程序名:用于标识子程序的名称。

过程声明:使用特定的指令(如PROC和ENDP)来声明子程序的开始和结束。

参数传递:子程序可以通过寄存器、内存变量或堆栈等方式接收和返回参数。

局部数据存储:子程序可以使用局部变量来存储临时数据,这些数据在子程序执行完毕后会被销毁。

指令序列:子程序包含一系列汇编指令,用于执行特定的任务。

2.子程序的调用和返回

调用子程序

使用CALL指令来调用子程序。CALL指令会将当前指令的下一条指令的地址压入堆栈,SP变小并且减小2若初始为0入栈后变为FFFE(-2补码),并跳转到子程序的入口点开始执行。

在调用子程序之前,需要确保所有必要的参数已经传递给子程序。

子程序执行

子程序在执行过程中,可以访问其局部变量和参数,并执行一系列指令来完成任务。

子程序可以使用RET指令来结束执行并返回到调用点。RET指令会从堆栈中弹出之前压入的返回地址,并跳转到该地址继续执行。

参数传递和返回值

子程序可以通过寄存器(如AX、BX等)来传递和返回参数。在调用子程序之前,调用者需要将参数放入指定的寄存器中。子程序执行完毕后,可以通过相同的寄存器将结果返回给调用者。

另一种参数传递方式是使用内存变量。调用者可以在内存中分配一个或多个变量来存储参数,并将这些变量的地址传递给子程序。子程序可以通过这些地址来访问和修改参数。

堆栈也可以用于参数传递和返回值。调用者可以将参数压入堆栈,子程序可以从堆栈中弹出参数。同样地,子程序可以将结果压入堆栈,调用者可以从堆栈中弹出结果。

 例题:

1、编写输出子程序,把AX中的数以二进制形式输出显示。

AX有16位,循环16次,每次与1相与保留最低位,然后向右循环移位

TWODISP PROC;以二进制显示AX中的数  AX入口参数
	PUSH AX
	PUSH BX
	PUSH CX
	PUSH DX
	MOV BL,0
	MOV DX,1
L0:
	MOV CX,AX
	AND CX,DX		
	PUSH CX
	INC BL
	ROR AX,1
	CMP BL,16
	JNE L0	
L1:
	POP DX
	ADD DL,48
	MOV AH,2
	INT 21H
	DEC BL
	CMP BL,0
	JNE L1
	
	POP DX
	POP CX
	POP BX
	POP AX
	RET
TWODISP ENDP

2、编写输出子程序,把AX中的数以十六进制形式输出显示。

 SHR指令格式:SHR reg/mem  i8/CL/1

 每次与低4位相与后入栈,然后向右移位4位,AX数据需要循环4次

在输出时有数字字符和字母字符,需要判断

SIXDISP PROC;以16进制显示AX中的数 AX入口参数
	PUSH AX
	PUSH BX
	PUSH CX
	PUSH DX
	MOV BL,0
	MOV DX,15
L0:
	MOV CX,AX
	AND CX,DX		
	PUSH CX
	MOV CL,4
	INC BL
	SHR AX,CL;8086必须用CL存位数
	CMP BL,4
	JNE L0	
L1:
	POP DX
	CMP DL,9
	JB L2
	ADD DL,37H
	JMP L3
L2: ADD DL,48
L3:
	MOV AH,2
	INT 21H
	DEC BL
	CMP BL,0
	JNE L1
	
	POP DX
	POP CX
	POP BX
	POP AX
	RET
SIXDISP ENDP 

3、把AX中的数以带符号十进制形式输出显示

 因为显示数字时除完商放在8位寄存器,所以正数不能大于2559,负数不能小于-2559

AX中的数字用补码形式存储,也可用反码

DISPLAY_NUM PROC;AX入口参数
	PUSH AX
	PUSH BX
	PUSH CX
	PUSH DX
	MOV CH,10
	MOV CL,0
	MOV BX,AX
	AND BX,8000H	;判断正负
	CMP BX,0
	JE POS
	MOV DL,45		;输出符号ASCII
	PUSH AX			;现场保护
	MOV AH,2
	INT 21H
	POP AX
	;AND AX,7FFFH	;负数用原码表示 符号位变0
	NEG AX       	;负数用补码表示求补
	;输出无符号十进制	
POS:				
	DIV CH
	PUSH AX
	ADD CL,1
	MOV AH,0
	CMP AL,0
	JNE POS
DIS:	
	POP DX
	DEC CL
	MOV DL,DH
	ADD DL,48
	MOV AH,2
	INT 21H
	CMP CL,0
	JNE DIS	
	
	POP DX
	POP CX
	POP BX
	POP AX
	RET
DISPLAY_NUM ENDP
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值