0
点赞
收藏
分享

微信扫一扫

汇编源码学习8-FAR-子程序远调用


;将AX中的值以十进制形式输出
ASSUME	DS:data1,SS:stack1
data1	SEGMENT
		decimal	DB	6 DUP(?),'$(编译时去掉此处括号)'
		temp	DB	6 DUP(?)
data1	ENDS
;
stack1	SEGMENT STACK
		DB		256 DUP(?)
stack1	ENDS
;不同段的子程序——output in decimal
;好像只能放在主程序的前面
code2	SEGMENT
outDec	PROC	FAR
		ASSUME	CS:code2
		;BEGIN:寄存器保护,将子程序中用到的寄存器保存
		PUSH	DI
		PUSH	BX
		PUSH	CX
		PUSH	DX
		PUSH	SI
		;END
		LEA		DI,temp
		MOV		BX,10
		MOV		CX,0	;记录十进制数的位数
again:	XOR		DX,DX
		DIV		BX
		MOV		[DI],DL	;保存余数
		INC		DI
		INC		CX
		CMP		AX,0
		JNE		again
		MOV		SI,OFFSET decimal
		ADD		SI,CX
		MOV		[SI],'$(编译时去掉此处括号)'	;字符串结束符
		DEC		SI
		LEA		DI,temp
next:	MOV		AL,[DI]
		MOV		[SI],AL
		ADD		[SI],30H	;转为ASCII码
		DEC		SI
		INC		DI
		DEC		CX
		CMP		CX,0
		JNE		next
		LEA		DX,decimal
		MOV		AH,9
		INT		21H
		;BEGIN:寄存器恢复
		POP		SI
		POP		DX
		POP		CX
		POP		BX
		POP		DI
		;END
		RET
outDec	ENDP
code2	ENDS
;主程序
code1	SEGMENT
		ASSUME	CS:code1
start:	MOV		AX,data1
		MOV		DS,AX
		;
		MOV		AX,0FFFFH	;设置AX的值;不能写成FFFFH
		CALL	FAR PTR outDec
		MOV		AH,4CH
		INT 	21H
code1	ENDS
		END		start



举报

相关推荐

0 条评论