汇编语言之子程序

1)子程序的类型不同,对子程序的使用会带来什么不同
(2)子程序的定义该放在哪里?
(3)子程序和宏指令的区别?

子程序又称为过程,相当于高级语言的过程或函数,是一个独立的程序段,能完成某些确定的功能,并能被其它程序调用。
1)过程的定义
过程名 PROC 类型



RET
过程名 ENDP

类型:2种
near 段内,进程调用,偏移地址压入堆栈
far 段间,
2)过程的调用
CALL 过程名
a、段内调用

CSEG	SEGMENT

CALL	SUBT

MOV		AH,4CH
INT		21H
		SUBT	PROC	NEAR
		
		RET
			SUBT	ENDP
CSEG	ENDS
		

b、段间调用

XSEG	SEGMENT
	.
	.
	.
	CALL	SUBT1
	.
	.
	.
	MOV	AH,4CH
	INT	21H
	SUBT1	PROC	FAR
	.
	.
	.
	RET
	SUBT1	ENDP
XSEG	ENDS

YSEG	SEGMENT	
	.
	.
	.
	CALL	SUBT1
	.
	.
	.
YSEG	ENDS

3)子程序在源程序中的位置
子程序一般是放在返回DOS语句和段结束语句之间的位置。因为在正常情况下这个区域的程序是不会被执行的。
4)宏指令与子程序
a、空间开销:子程序优于宏指令
b、时间开销:宏指令优于子程序
总上,当需多次访问的程序段较长,访问次数又不是太多时,选用子程序结构较好。当需多次访问的程序段较短,访问次数又很频繁时,选用宏指令结构更好。
5)子程序调用和宏调用使用例子:
在这里插入图片描述
A、子程序方法编程

DATA	SEGMENT
	HEXDATA	DW	4D7EH
	RESULT	DB	4 DUP(?)
DATA	ENDS
CODE	SEGMENT
	ASSUME	CS:CODE,DS:DATA
	START:	MOV	AX,DATA
		MOV	DS,AX
		MOV	CX,4
		LEA	SI,HEXDATA
		LEA	DI,RESULT
		MOV	BX,[SI]
	NEXT:	MOV	AX,BX
		AND	AL,0FH
		CALL	HEXASC
		MOV	[DI],AL
		INC	DI
		PUSH	CX
		MOV	CX,4
		SHR	BX,CL
		POP	CX
		LOOP	NEXT
		LEA	SI,RESULT+3
		MOV	CX,4
		STD
	LOOP1:	LODSB
		 MOV	DL,AL
		 MOV	AH,02H
		 MOV	AH,02H
		 INT	21H
		 LOOP	LOOP1
		 MOV	DL,'H'
		 MOV	AH,02H
		 INT	21H
		 MOV	AH,4CH
		 INT	21H

	HEXASC	PROC
		CMP	AL,0AH
		JB	PLUS30
		ADD	AL,07H
	PLUS30:ADD	AL,30H
	RET
	HEXASC	ENDP
CODE	ENDS
	END	START

B、用宏指令方法编程

DATA	SEGMENT
	HEXDATA	DW 4D7EH
	RESULT	DB	4 DUP(?)
DATA	ENDS
CODE	SEGMENT
	ASSUME	CS:CODE,DS:DATA
	START:	MOV	AX,DATA
		MOV	DS,AX
		HEXASC	MACRO
			CMP	AL,OAH
			JB	PLUS30
			ADD	AL,07H
		PLUS30:	ADD	AL,30H
			ENDM
		MOV	CX,4
		LEA	SI,HEXDATA
		LEA	DI,RESULT
		MOV	BX,[SI]
	NEXT:	MOV	AX,BX
		AND	AL,0FH
		HEXASC
		MOV	[DI],AL
		INC	DI
		PUSH	CX
		MOV	CX,4
		SHR	BX,CL
		POP	CX
		LOOP	NEXT
		LEA	SI,RESULT+3
		MOV	CX,4
		STD
	LOOP1:	LODSB
		MOV	DL,AL
		MOV	AH,02H
		INT	21H
		LOOP	LOOP1
		MOV	DL,'H'
		MOV	AH,02H
		INT	21H
		MOV	AH,4CH
		INT	21H
CODE	ENDS
	END	START


你可能感兴趣的:(汇编语言)