汇编语言可以由多个子程序组成,但是必须包含一个main主程序
那么main主程序下如何调用其他子程序呢?

CALL指令与RET指令:

CALL指令:转移到调用的子程序 的指令
RET指令:子程序的返回指令

一般格式:CALL子程序名
RET

子程序类型:
NEAR:如果用户的子程序和主程序在同一个代码段,则使用near
FAR:如果用户的子程序和主程序不在一个代码段,则使用far




由MAIN主程序和ABC子程序组成的程序结构:

MAIN	PROC
	;MAIN 程序代码
	CALL	ABC
	;MAIN 程序代码	
MAIN	ENDP

ABC	PROC
	;保存到堆栈。
	;ABC程序代码。
	;从堆栈还原。
	RET
ABC	ENDP
	END	MAIN




例:创建二进制输入INBIN子程序和二进制输出OUTBIN子程序,使用INBIN和OUTBIN子程序输入两个二进制数,执行XOR运算,然后以二进制数输出结果

.MODEL SMALL
.STACK 100H
.CODE
MAIN 	PROC
	MOV	AH,2
	MOV	DL,'?'
	INT	21H
	CALL	INBIN
	MOV	BH,BL
	CALL	INBIN
	XOR	BL,BH
	MOV	AH,2
	MOV	DL,0DH
	INT	21H
	MOV	DL,0AH
	INT	21H	
	CALL	OUTBIN
	MOV 	AH,4CH
	INT 	21H
MAIN	ENDP

INBIN	PROC
	PUSH	AX
	PUSH	DX
@BEGIN:
	XOR	BL,BL
	MOV	AH,1
	INT	21H
@WHILE:	
	CMP	AL,0DH
	JE	@END_WHILE
	CMP	AL,' '
	JE	@END_WHILE
	CMP	AL,'0'
	JE	@BINARY
	CMP	AL,'1'
	JE	@BINARY
	JMP	@ERROR
@BINARY:
	AND	AL,0FH	
	SHL	BL,1
	OR	BL,AL
	INT	21H
	JMP	@WHILE
@END_WHILE:
	POP	DX
	POP	AX
	RET
@ERROR:
	MOV	AH,2
	MOV	DL,0DH
	INT	21H
	MOV	DL,0AH
	INT	21H
	JMP	@BEGIN
INBIN	ENDP

OUTBIN	PROC
	PUSH	AX
	PUSH	CX
	PUSH	DX
	MOV	CX,8
@OUTPUT:
	ROL	BL,1
	JC	@HIGH
	MOV	DL,30H
	JMP	@NEXT
@HIGH:	MOV	DL,31H
@NEXT:
	INT	21H
	LOOP	@OUTPUT
	POP	DX
	POP	CX
	POP	AX
	RET
OUTBIN	ENDP
	END 	MAIN

最后修改:2022 年 03 月 08 日
如果觉得我的文章对你有用,请随意赞赏