⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myasm.a51

📁 C to ASM and ASM to C on Keil C
💻 A51
字号:

; 汇编代码部分
$NOMOD51

NAME	MYASM

#include "REG51.H"			; 头文件在当前目录下,允许重复说明

?PR?_fnAdd?MYASM     SEGMENT CODE 	; 码段定义叙述,需要对本文件内的所有
?PR?_fnSub?MYASM     SEGMENT CODE 	; 函数进行描述
?PR?timerCt0?MYASM   SEGMENT CODE

	EXTRN	DATA (aa)		; 全局变量在主程序中已有定义
	extrn CODE (_fnMul)		; 外部C函数调用说明
	PUBLIC	timerCt0		; 对外传递函数名叙述
	PUBLIC	_fnSub
	PUBLIC	_fnAdd

;------------------------------------------------------------------------
; 相对应于C函数的函数格式:
; unsigned char fnAdd( unsigned char x ,unsigned char y )
;------------------------------------------------------------------------
	RSEG  ?PR?_fnAdd?MYASM
_fnAdd:
	USING	0
	PUSH    ACC
	lcall	_fnMul			; *** 调用C函数 ***
	MOV  	A,R7
	ADD  	A,R5
	MOV  	R7,A
	POP	ACC
?C0001:
	RET
;------------------------------------------------------------------------
; 相对应于C函数的函数格式:
; unsigned char fnSub( unsigned char x ,unsigned char y )
;------------------------------------------------------------------------

	RSEG  ?PR?_fnSub?MYASM
_fnSub:
	USING	0
	PUSH	ACC
	CLR  	C
	MOV  	A,R7
	SUBB 	A,R5
	MOV  	R7,A
	POP	ACC
?C0002:
	RET


;-----------------------------------------------------------------------
; 中断函数中断号对应向量表的说明,如果还有其他中断使用汇编的,请一并顺序
; 在此叙述。
;-----------------------------------------------------------------------
CSEG	AT	0000BH			; 定时中断0
	LJMP	timerCt0

;------------------------------------------------------------------------
; 相对应于C函数的函数格式:
; void timerCt0(void) interrupt 1
; 这是一个定时中断函数,作为演示没有做太多的处理,仅仅对(int)aa++。中断函
; 数须要特别留意现场保护
;------------------------------------------------------------------------

	RSEG  ?PR?timerCt0?MYASM
	USING	0
timerCt0:
	PUSH 	ACC
	PUSH	PSW
	MOV  	TH0,#0FFH
	MOV  	TL0,#0E0H
	INC  	aa+01H
	MOV  	A,aa+01H
	JNZ  	?C0004
	INC  	aa
?C0004:
	POP	PSW
	POP  	ACC
	RETI

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -