📄 setiobit.asm
字号:
//========================================================================
// 文件名称: SetIOBit.asm
// 功能描述: IO口位操作接口函数
// 维护记录: 2005-09-06 V1.0
//========================================================================
.INCLUDE hardware.inc
.DATA
Bit: .DW 0xfffe,0xfffd,0xfffb,0xfff7,0xffef,0xffdf,0xffbf,0xff7f
.DW 0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff;
One: .DW 0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080
.DW 0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000;
.CODE
//==============================================================================
//汇编语言格式:_Set_IOB_Bit
//功能描述: 对IOB进行位设置
//Set_IOB_Bit(unsigned int, unsigned int, unsigned int , unsigned int , unsigned int);第一个参数为需要对IO口的哪个位进行操作,然后参数依次为操作IO口的Dirretory、Attribion、Data、Buffer。
//入口参数: unsigned int - 需要位操作的端口号
// unsigned int - 设置端口的Dirretory属性
// unsigned int - 设置端口的Attribion属性
// unsigned int - 设置端口的Data属性
// unsigned int - 设置端口的Buffer属性
//出口参数: 无
//===============================================================================
.PUBLIC _Set_IOB_Bit
.PUBLIC Set_IOB_Bit
_Set_IOB_Bit:.PROC
Set_IOB_Bit:
push bp to [sp]
bp = sp + 3
r4 = [bp+1]
r1 = [P_IOB_Dir]
r2 = r4 + Bit
r2 = [r2]
r1 = r1 & r2
r3 = [bp+2]
cmp r3,0
je BZeroDir
r2 = r4 + One
r2 = [r2]
r1 = r1 | r2
[P_IOB_Dir] = r1
BZeroDir:
[P_IOB_Dir] = r1
r1 = [P_IOB_Attrib]
r2 = r4 + Bit
r2 = [r2]
r1 = r1 & r2
r3 = [bp+3]
cmp r3,0
je BZeroAttrib
r2 = r4 + One
r2 = [r2]
r1 = r1 | r2
[P_IOB_Attrib] = r1
BZeroAttrib:
[P_IOB_Attrib] = r1
r1 = [P_IOB_Buffer]
r2 = r4 + Bit
r2 = [r2]
r1 = r1 & r2
r3 = [bp+4]
cmp r3,0
je BZeroBuffer
r2 = r4 + One
r2 = [r2]
r1 = r1 | r2
[P_IOB_Buffer] = r1
BZeroBuffer:
[P_IOB_Buffer] = r1
r1 = [P_IOB_Buffer]
r2 = r4 + Bit
r2 = [r2]
r1 = r1 & r2
r3 = [bp+4]
cmp r3,0
je BZeroData
r2 = r4 + One
r2 = [r2]
r1 = r1 | r2
[P_IOB_Data] = r1
BZeroData:
[P_IOB_Data] = r1
pop bp from [sp]
retf
.ENDP
//==============================================================================
//汇编语言格式:_Set_IOA_Bit
//功能描述: 对IOA进行位设置
//Set_IOA_Bit(unsigned int, unsigned int, unsigned int , unsigned int , unsigned int);第一个参数为需要对IO口的哪个位进行操作,然后参数依次为操作IO口的Dirretory、Attribion、Data、Buffer。
//入口参数: unsigned int - 需要位操作的端口号
// unsigned int - 设置端口的Dirretory属性
// unsigned int - 设置端口的Attribion属性
// unsigned int - 设置端口的Data属性
// unsigned int - 设置端口的Buffer属性
//出口参数: 无
//===============================================================================
.PUBLIC _Set_IOA_Bit
.PUBLIC Set_IOA_Bit
_Set_IOA_Bit:.PROC
Set_IOA_Bit:
push bp to [sp]
bp = sp + 3
r4 = [bp+1]
r1 = [P_IOA_Dir]
r2 = r4 + Bit
r2 = [r2]
r1 = r1 & r2
r3 = [bp+2]
cmp r3,0
je AZeroDir
r2 = r4 + One
r2 = [r2]
r1 = r1 | r2
[P_IOA_Dir] = r1
AZeroDir:
[P_IOA_Dir] = r1
r1 = [P_IOA_Attrib]
r2 = r4 + Bit
r2 = [r2]
r1 = r1 & r2
r3 = [bp+3]
cmp r3,0
je AZeroAttrib
r2 = r4 + One
r2 = [r2]
r1 = r1 | r2
[P_IOA_Attrib] = r1
AZeroAttrib:
[P_IOA_Attrib] = r1
r1 = [P_IOA_Buffer]
r2 = r4 + Bit
r2 = [r2]
r1 = r1 & r2
r3 = [bp+4]
cmp r3,0
je AZeroBuffer
r2 = r4 + One
r2 = [r2]
r1 = r1 | r2
[P_IOA_Buffer] = r1
AZeroBuffer:
[P_IOA_Buffer] = r1
r1 = [P_IOA_Buffer]
r2 = r4 + Bit
r2 = [r2]
r1 = r1 & r2
r3 = [bp+4]
cmp r3,0
je AZeroData
r2 = r4 + One
r2 = [r2]
r1 = r1 | r2
[P_IOA_Data] = r1
AZeroData:
[P_IOA_Data] = r1
pop bp from [sp]
retf
.ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -