A51的汇编控制指令即宏指令
51单片机汇编指令详解
51单片机汇编指令详解
mcs-51系列单片机指令
目录:1、a2、x3、r4、s5、n6、o7、p8、m9、j10、l11、d12、i13、c
一、以a结尾的指令存有18条,分别为:
acalladdr11adda,rn
adda,directadda,@riadda,#dataaddca,rn
addca,directaddca,@riaddca,#dataajmpaddr11anla,rn
anla,directanla,@rianla,#dataanldirect,a
anldirect,#dataanlc,bit
anlc,/bit
1、acalladdr11
指令名称:绝对调用指令
指令代码:{a10,a9,a8,10001},a[7:0]
指令功能:结构目的地址,展开子程序调用。其方法就是以指令提供更多的11十一位地址(al0~a0),替代pc的高11十一位,pc的高5十一位维持不变。操作方式内
容:pc←(pc)+2sp←(sp)+1(sp)←(pc)7~0sp←(sp)+1
(sp)←(pc)15~8pc10~0←addrl0~0字节数:2机器周期:2
采用表明:由于指令只得出子程序入口地址的高11十一位,因此调用范围就是2kb。
2、adda,rn
指令名称:寄存器乘法指令指令代码:28h~2fh
指令功能:累加器内容与寄存器内容相加操作内容:a←(a)+(rn),n=0~7字节数:1机器周期;1
影响标志位:c,ac,ov
3、adda,direct
指令名称:轻易串行乘法指令指令代码:25h
指令功能:累加器内容与内部ram单元或专用寄存器内容相加操作内
51单片机汇编语言指令集
若(A) 3-0>9或(AC)=1,则(A) 3-0←(A)3-0+6 若(A) 7-4>9或 (C)=1,则(A) 7-4←(A)7-4+6 逻辑运算指令 25.ANL A,Rn 26.ANL A,direct 27.ANL A,@Ri 28.ANL A,#data 29.ANL direct,A 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器 2 1 将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器 2 1 将累加器的值与常数做AND的逻辑判断,结果存回累加器 2 1 将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址
110.DJNZ direct,rel 3 2 将直接地址的内容减1,不等于0则跳至rel所指的相关地址 111.NOP 1 1 无动作
指令介绍
指令 算数运算指令 1.ADD A,Rn 2.ADD A,direct 3.ADD A,@Ri 4.ADD A,#data 5.ADDC A,Rn 6.ADDC A,direct 7.ADDC A,@Ri 8.ADDC A,#data 9.SUBB A,Rn 10.SUBB A,direct 11.SUBB A,@Ri 12.SUBB A,0data 13.INC A 14.INC Rn
51汇编指令大全
51汇编指令大全
Rn: 表示当前寄存器区的8个工作寄存器R0~R7
Ri: 表示当前寄存器区的R0或R1,可作地址指针即间接寻址寄存器(i=0或1)
@: 为间接寄存器或基址寄存器的前缀.
Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址
0~127.
特殊功能寄存器SFR的地址(128~255)或名称,
A: 累加器ACC.
B: 特殊功能寄存器B,用于MUL和DIV指令中.
C: 进位位Cy.
#data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间.
#data16: 表示包含在指令中的双字节(16位)立即数.
Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间.
Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页.
Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值.
DPTR: 为数据指针,可用作16位的地址寄存器.
/: 加在位操作的前面,表示对该位进行非运算.
bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位.
(x): 寄存器或地址单元中的内容.
((x)): 用x间接寻址的单元中的内容.
<-: 表示将箭头右边的内容传送至箭头的左边.
keilA51汇编语言伪指令
格式:RSEG segment
例: MYPROG SEGMENT CODE ; Declare the segment
RSEG MYPROG ; Select the segment
八、符号定义类
1、BIT 定义Leabharlann Baidu个位地址
格式 symbol BIT address
2、CODE 在 CODE 区定义一个地址
格式: label: DB expression [, expression ...] 如果 express 为空,默认为00H
例如定义5个存储区,10H,11H,00H,3FH,20H:
DB 10H,11H, ,3FH,20H
expression 还可以是字符串 例如
DB 1+1, "CAT","C"+1
以前定义过代码段,汇编将从上一个代码段的结尾开始。
5、ISEG 定义一个绝对 IdATA 段
格式:ISEG AT address
ISEG 在 Idata 存储区选择一个绝对段,如果 address 被指定,汇编器将从这个绝对地址开始
编译,有效值00h-ffh。如果 address 被省略将从0H 开始汇编(前面没有定义过代码段)如果
以前定义过代码段,汇编将从上一个代码段的结尾开始。
6、XSEG 定义一个绝对 XdATA 段
(完整版)51单片机汇编指令(全)
指令中常用符号说明
Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7)
Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1)
Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址
#data表示8位常数(立即数)
#data16表示16位常数
Add16表示16位地址
Addr11表示11位地址
Rel8位代符号的地址偏移量
Bit表示位地址
@间接寻址寄存器或基址寄存器的前缀
( )表示括号中单元的内容
(( ))表示间接寻址的内容
指令系统
数据传送指令(8个助记符)
助记符中英文注释
MOV Move 移动
MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A
MOV A , Direct;(direct)→A,直接地址的内容送A
MOV A ,@ Ri;(Ri)→A,RI间址的内容送A
MOV A , #data;data→A,立即数送A
MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn
MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn
MOV Rn , #data;data→Rn,立即数送Rn
MOV direct , A;A→(direct),累加器A中的内容送直接地址中
MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址
MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址
MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址
MOV direct , #data;8位立即数送到直接地址中
51汇编指令表
51汇编指令表.txt符号定义表 符号 含义 Rn R0~R7寄存器n=0~7 Direct 直接地址,内部数据区的地址RAM(00H~7FH) SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0 @Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH) #data 8位常数 #data16 16位常数 Addr16 16位的目标地址 Addr11 11位的目标地址 Rel 相关地址 bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位 指令介绍 指令 字节 周期 动作说明一、算数运算指令1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器13.INC A 1 1 将累加器的值加114.INC Rn 1 1 将寄存器的值加l15.INC direct 2 1 将直接地址的内容加116.INC @Ri 1 1 将间接地址的内容加117.INC DPTR 1 1 数据指针寄存器值加1说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位 18.DEC A 1 1 将累加器的值减119.DEC Rn 1 1 将寄存器的值减120.DEC direct 2 1 将直接地址的内容减121.DEC @Ri 1 1 将间接地址的内容减122.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为0 24.DA A 1 1 将累加器A作十进制调整,若(A
51单片机汇编指令详解
MCS-51系列单片机指令
以A开头的指令有18条,分别为:
ACALL addr11
ADD A,Rn
ADD A,direct
ADD A,@Ri
ADD A,#data
ADDC A,Rn
ADDC A,direct
ADDC A,@Ri
ADDC A,#data
AJMP addr11
ANL A,Rn
ANL A,direct
ANL A,@Ri
ANL A,#data
ANL direct,A
ANL direct,#data
ANL C,bit
ANL C,/bit
1、ACALL addr11
指令名称:绝对调用指令
指令代码:{A10,A9,A8,10001},A[7:0]
指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址
(al0~a0),取代PC的低11位,PC的高5位不变。
操作内容:
PC←(PC)+2
SP←(SP)+1
(SP)←(PC)7~0
SP←(SP)+1
(SP)←(PC)15~8
PC10~0←addrl0~0
字节数: 2
机器周期:2
使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。
2、ADD A,Rn
指令名称:寄存器加法指令
指令代码:28H~2FH
指令功能:累加器内容与寄存器内容相加
操作内容:A←(A)+(Rn), n=0~7
字节数: 1
机器周期;1
影响标志位:C,AC,OV
3、ADD A,direct
指令名称:直接寻址加法指令
指令代码:25H
指令功能:累加器内容与内部RAM单元或专用寄存器内容相加
操作内容:A←(A)+(direct)
字节数: 2
机器周期:1
51汇编指令
指令格式功能简述字节数周期
一、数据传送类指令
MOV A, Rn 寄存器送累加器 1 1
MOV Rn,A 累加器送寄存器 1 1
MOV A ,@Ri 内部RAM单元送累加器 1 1
MOV @Ri ,A 累加器送内部RAM单元 1 1
MOV A ,#data 立即数送累加器 2 1
MOV A ,direct 直接寻址单元送累加器 2 1
MOV direct ,A 累加器送直接寻址单元 2 1
MOV Rn,#data 立即数送寄存器 2 1
MOV direct ,#data 立即数送直接寻址单元 3 2
MOV @Ri ,#data 立即数送内部RAM单元 2 1
MOV direct ,Rn 寄存器送直接寻址单元 2 2
MOV Rn ,direct 直接寻址单元送寄存器 2 2
MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2
MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2
51单片机汇编语言指令教程汇集
51单片机汇编语言指令教程汇集
1.MOV指令:MOV指令用于将一个值从一个寄存器或内存位置复制到
另一个寄存器或内存位置。例如,MOVA,将常数10复制到累加器A中。
2.ADD指令:ADD指令用于将两个操作数相加,并将结果保存在目标
操作数中。例如,ADDA,B将寄存器B的值与累加器A的值相加,并将结
果保存在累加器A中。
3.SUB指令:SUB指令用于将源操作数减去目标操作数,并将结果保
存在目标操作数中。例如,SUBA,B将寄存器B的值减去累加器A的值,
并将结果保存在累加器A中。
4.INC指令:INC指令用于将指定的操作数加1、例如,INCA将累加
器A的值加1
5.DEC指令:DEC指令用于将指定的操作数减1、例如,DECA将累加
器A的值减1
6.JMP指令:JMP指令用于无条件地跳转到指定的地址。例如,
JMP1000h将跳转到地址1000h处执行指令。
9. ACALL指令:ACALL指令用于调用一个子程序,其地址由指令给出,子程序结束后返回到调用指令的下一条指令。例如,ACALL Subroutine
将调用一个名为Subroutine的子程序。
10.RET指令:RET指令用于从子程序返回到调用指令的下一条指令。
例如,RET将从子程序返回。
11.NOP指令:NOP指令用于空操作,即不执行任何操作。它通常用于
延时或填充空白。
以上是一些常用的51单片机汇编语言指令,这些指令可以用于控制I/O口、进行算术运算、执行跳转和调用子程序等。学习并熟练掌握这些指令,对于编写高效的51单片机汇编程序非常重要。
51单片机汇编指令详解
MCS-51系列单片机指令
以A开头的指令有18条,分别为:
ACALL addr11
ADD A,Rn
ADD A,direct
ADD A,@Ri
ADD A,#data
ADDC A,Rn
ADDC A,direct
ADDC A,@Ri
ADDC A,#data
AJMP addr11
ANL A,Rn
ANL A,direct
ANL A,@Ri
ANL A,#data
ANL direct,A
ANL direct,#data
ANL C,bit
ANL C,/bit
1、ACALL addr11
指令名称:绝对调用指令
指令代码:{A10,A9,A8,10001},A[7:0]
指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址
(al0~a0),取代PC的低11位,PC的高5位不变。
操作内容:
PC←(PC)+2
SP←(SP)+1
(SP)←(PC)7~0
SP←(SP)+1
(SP)←(PC)15~8
PC10~0←addrl0~0
字节数: 2
机器周期:2
使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。
2、ADD A,Rn
指令名称:寄存器加法指令
指令代码:28H~2FH
指令功能:累加器内容与寄存器内容相加
操作内容:A←(A)+(Rn), n=0~7
字节数: 1
机器周期;1
影响标志位:C,AC,OV
3、ADD A,direct
指令名称:直接寻址加法指令
指令代码:25H
指令功能:累加器内容与内部RAM单元或专用寄存器内容相加
操作内容:A←(A)+(direct)
字节数: 2
机器周期:1
A51的汇编控制指令即宏指令
A51汇编器是运行于IBM PC系列及其兼容机上的交叉汇编软件,其主要功能是将MCS-51系列单片机汇编语言源程序翻译成符合Intel目标文件格式的可再定位的目标代码,经过L51连接器的连接和装配,产生可被DS51仿真器调试或其它任何一种与Intel 目标文件格式兼容的仿真器使用的绝对目标代码.
一:A51的符号:在A51中可使用符号表示数值(EQU),地址和寄存器名,符号具有段类型,作用域,值域和可变性等属性.
符号的段属性:指出符号所位于的地址空间.段类型有:
NUMBER 无类型符号
DATA DATA段符号(可直接寻址的内部RAM空间)
IDATA IDATA段符号(可间接寻址的内部RAM空间)
XDATA XDATA段符号(外部数据存储空间)
BIT BIT段符号(内部RAM低地址区的可位寻址的空间)
CODE CODE段符号(程序存储器空间)
REGISTER 寄存器符号
作用域:指出符号是外部的,局部的还是全局的.(PUBLIC,EXTRN关键字说明) 二:标号:定义标号时,标号名后必须接冒号”:”,以示区别,每行只能定义一个标号,标号一经定义,其值为当前地址计数器的当前值,因此标号代表了指令和数据的地址,不能重复定义.
三:特殊的汇编符号:A51宏汇编语言定义了代表CPU寄存器的特殊符号,这些是保留的关键字,AR0---AR7:表示当前工作寄存器的R0—R7的绝对地址,它的值取决于指令所选择的工作寄存器组.
四:运算符:有三种
1):算术运算符包括:+,-(正负号),加---+,减,乘,除,MOD(取模),()—括号,改变运算顺序.
51单片机汇编指令表
指令说明 字节 周期 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR, 16 位常数加载到数据指针 3 1 MOVC A, 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1 XCH A, @Ri 间接RAM 和累加器交换 1 1 XCHD A, @Ri 间接RAM 和累加器交换低4 位 1 1 (算术运算类指令) INC A 累加器加1 1 1 INC Rn 寄存器加1 1 1 INC direct 直接地址加1 2 1 INC @Ri 间接RAM 加1 1 1 INC DPTR 数据指针加1 1 2 DEC A 累加器减1 1 1 DEC Rn 寄存器减1 1 1 DEC direct 直接地址减1 2 2 DEC @Ri 间接RAM 减1 1 1 MUL AB 累加器和B 寄存器相乘 1 4 DIV AB 累加器除以B 寄存器 1 4 DA A 累加器十进制调整 1 1 ADD A,Rn 寄存器与累加器求和 1 1 ADD A,direct 直接地址与累加器求和 2 1 ADD A,@Ri 间接RAM 与累加器求和 1 1 ADD A,#data 立即数与累加器求和 2 1 ADDC A,Rn 寄存器与累加器求和(带进位) 1 1 ADDC A,direct 直接地址与累加器求和(带进 2 1 ADDC A,@Ri 间接RAM 与累加器求和(带进 1 1 ADDC A,#data 立即数与累加器求和(带进位) 2 1 SUBB A,Rn 累加器减去寄存器(带借位) 1 1 SUBB A,direct 累加器减去直接地址(带借位) 2 1 SUBB A,@Ri 累加器减去间接RAM(带借位) 1 1 SUBB A,#data 累加器减去立即数(带借位) 2 1 (逻辑运算类指令) ANL A,Rn 寄存器“与”到累加器 1 1
51单片机汇编语言指令集
110.DJNZ direct,rel 3 2 将直接地址的内容减1,不等于0则跳至rel所指的相关地址
66.MOVC A,@A+DPTR
1 2 (A) ←((A)+(DPTR))
累加器的值再加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器 67.MOVC A,@A+PC 68.MOVX A,@Ri 69.MOVX A,@DPTR 70.MOVX @Ri,A 71.MOVX @DPTR,A 72.PUSH direct 73.POP direct 74.XCH A,Rn 75.XCH A,direct 76.XCH A,@Ri 77.XCHD A,@Ri 布尔代数运算 78.CLR C 79.CLR bit 80.SETB C 81.SETB bit 82.CPL C 83.CPL bit 84.ANL C,bit 85.ANL C,/bit 86.ORL C,bit 87.ORL C,/bit 88.MOV C,bit 89.MOV bit,C 90.JC rel 91.JNC rel 92.JB bit,rel 93.JNB bit,rel 94.JBC bit,rel 程序跳跃 1 1 清除进位C为0 2 1 清除直接地址的某位为0 1 1 设定进位C为1 2 1 设定直接地址的某位为1 1 1 将进位C的值反相 2 1 将直接地址的某位值反相 2 2 将进位C与直接地址的某位做AND的逻辑判断,结果存回进位C 2 2 将进位C与直接地址的某位的反相值做AND的逻辑判断,结果存回进位C 2 2 将进位C与直接地址的某位做OR的逻辑判断,结果存回进位C 2 2 将进位C与直接地址的某位的反相值做OR的逻辑判断,结果存回进位C 2 1 将直接地址的某位值存入进位C 2 2 将进位C的值存入直接地址的某位 2 2 若进位C=1则跳至rel的相关地址 2 2 若进位C=0则跳至rel的相关地址 3 2 若直接地址的某位为1,则跳至rel的相关地址 3 2 若直接地址的某位为0,则跳至rel的相关地址 3 2 若直接地址的某位为1,则跳至rel的相关地址,并将该位值清除为0 1 2 (PC)←(PC)+1;(A)←((A)+(PC))累加器的值加程序计数器的值作为其所指 定地址,将该地址的内容读入累加器
A51汇编器宏命令
A51汇编器是运行于IBM PC系列及其兼容机上的交叉汇编软件,其主要功能是将MCS-51系列单片机汇编语言源程序翻译成符合Intel目标文件格式的可再定位的目标代码,经过L51连接器的连接和装配,产生可被DS51仿真器调试或其它任何一种与Intel 目标文件格式兼容的仿真器使用的绝对目标代码.
一:A51的符号:在A51中可使用符号表示数值(EQU),地址和寄存器名,符号具有段类型,作用域,值域和可变性等属性.
符号的段属性:指出符号所位于的地址空间.段类型有:
NUMBER 无类型符号
DATA DATA段符号(可直接寻址的内部RAM空间)
IDATA IDATA段符号(可间接寻址的内部RAM空间)
XDATA XDATA段符号(外部数据存储空间)
BIT BIT段符号(内部RAM低地址区的可位寻址的空间)
CODE CODE段符号(程序存储器空间)
REGISTER 寄存器符号
作用域:指出符号是外部的,局部的还是全局的.(PUBLIC,EXTRN关键字说明)
二:标号:定义标号时,标号名后必须接冒号”:”,以示区别,每行只能定义一个标号,标号一经定义,其值为当前地
址计数器的当前值,因此标号代表了指令和数据的地址,不能重复定义.
三:特殊的汇编符号:A51宏汇编语言定义了代表CPU寄存器的特殊符号,这些是保留的关键字,AR0---AR7:表示当前工作寄存器的R0—R7的绝对地址,它的值取决于指令所选择的工作寄存器组.
四:运算符:有三种1):算术运算符包括:+,-(正负号),加---+,减,乘,除,MOD(取模),()—括号,改变运算顺序.2):二进制运算符号:用来对二进制数进行按位取反,移位或逻辑运算.包括:NOT(按位取反),HIGH(取右边操作数的高8
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A51汇编器是运行于IBM PC系列及其兼容机上的交叉汇编软件,其主要功能是将MCS-51系列单片机汇编语言源程序翻译成符合Intel目标文件格式的可再定位的目标代码,经过L51连接器的连接和装配,产生可被DS51仿真器调试或其它任何一种与Intel 目标文件格式兼容的仿真器使用的绝对目标代码.
一:A51的符号:在A51中可使用符号表示数值(EQU),地址和寄存器名,符号具有段类型,作用域,值域和可变性等属性.
符号的段属性:指出符号所位于的地址空间.段类型有:
NUMBER 无类型符号
DATA DATA段符号(可直接寻址的内部RAM空间)
IDATA IDATA段符号(可间接寻址的内部RAM空间)
XDATA XDATA段符号(外部数据存储空间)
BIT BIT段符号(内部RAM低地址区的可位寻址的空间)
CODE CODE段符号(程序存储器空间)
REGISTER 寄存器符号
作用域:指出符号是外部的,局部的还是全局的.(PUBLIC,EXTRN关键字说明) 二:标号:定义标号时,标号名后必须接冒号”:”,以示区别,每行只能定义一个标号,标号一经定义,其值为当前地址计数器的当前值,因此标号代表了指令和数据的地址,不能重复定义.
三:特殊的汇编符号:A51宏汇编语言定义了代表CPU寄存器的特殊符号,这些是保留的关键字,AR0---AR7:表示当前工作寄存器的R0—R7的绝对地址,它的值取决于指令所选择的工作寄存器组.
四:运算符:有三种
1):算术运算符包括:+,-(正负号),加---+,减,乘,除,MOD(取模),()—括号,改变运算顺序.
2):二进制运算符号:用来对二进制数进行按位取反,移位或逻辑运算.包
括:NOT(按位取反),HIGH(取右边操作数的高8位,LOW(取右边操作数的低8
位)SHR(右移位),SHL(左移位),AND(逻辑与),OR(逻辑或),XOR(逻辑异或). 3):关系运算符:>=,<=,<>,=,<,>.
所有运算符的优先级顺序:()→NOT,HIGH,LOW→+,-(正负号)→*,/,MOD→+,-(加减)→SHR,SHL→AND,OR,XOR→>=,<=,<>,>,<,=.
数值表达式:数值表达式由运算符和操作数组成,一个操作数又可以是表达式,与符号具有段属性一样,表达式也具有段类型属性,表达式的类型依赖于操作数的类型.表达式的类型如下:BIT,NUMBER,CODE,DATA,IDATA,XDATA.大多数的表达式是无类型的,当表达式中包含有段类型的操作数或者是子表达式时,运算结果的段类型遵循下面的原则:
对于单目运算符:(+/-/HIGH/LOW/NOT)表达式的结果与操作数具有相同的类型. 对于所有的双目运算符(除+/-),表达式的结果均为无类型的结果.
对加减运算,只有当其中的一个操作数具有段类型的时候,运算结果才具有相同的段类型,如果两个操作数具有段类型,即使他们的段类型一样,结果也是无类型的(NUMBER).
总结:只有当操作数加上或者是减去一个无类型时,才可能产生一类型,其他所有的组合均产生无类型的表达式.
A51提供了伪指令,可以利用这些伪指令在汇编程序中定义符号,保留和初始化
存储空间,定位目标代码等功能,伪指令中除DB,DW外均不产生目标代码,但可以改变汇编器的状态,并将有关信息(如段定义)加到目标文件中.
伪指令分四类:
1):定义符号:SEGMENT,EQU,SET,DATA,IDATA,XDATA,BIT,CODE
2):保留和初始化存储空间:DS,DB,DW,DBIT
3):程序链接:PUBLIC,EXTRN,NAME
4):汇编状态控制和段选择
:ORG,END,RSEG,CSEG,DSEG,XSEG,ISEG,BSEG,USING
一:定义符号的伪指令
1)SEGMENT
格式: 段名符号 SEGMENT 段类型 [再定位类型]
SEGMENT指令可声明一个可再定位(区别于CSEG,DSEG,XSEG,BSEG,ISEG等定义的在相对应的空间固定地址定义的绝对段—在连接的过程中不允许重新定位)的段符号和一个可选的再定位类型,段符号可以用来定义段,L51连接器可将多个
模块内的具有相同段名和再定位类型的几个段合成为一个段.段类型说明了段所处的地址空间.
如果是编写的汇编程序要与C源程序接口,即被C源程序调用,则全部的汇编子程序所命名的定义的代码段的段名必须是可用SEGMENT来定义的,而且名字的命名的方法也应该参照C51编译器产生的局部段的段名的转换规则.段名的作用主要是在汇编的时候用RSEG来激活的,在连接定位的时候用到的.与段名相应的是用于存储和传递参数的别名,可以在汇编源程序中直接应用局部段的别名,这个别
名主要是在传递函数参数的时候用的.在汇编程序中要用PUBLIC 声明被其他模块引用的全局符号.
DATA (可直接寻址的内部RAM空间)
IDATA (可间接寻址的内部RAM空间)
XDATA (外部数据存储空间)
BIT (内部RAM低地址区的可位寻址的空间)
CODE (程序存储器空间)
可选的再定位类型定义了L51连接时的定位方式,再定位类型:
UNIT:定义一个可开始于任一单元的段对于BIT型的段,一个单元是一个位,
其它所有的段一个单元是一个字节.
PAGE:定义一个起始地址必须是256的整数倍的段,段的绝对地址由L51自己计算,该类型只允许用于XDATA和CODE类型段.
INPAGE:定义一个由L51连接后必须包含在256B的块中,只适用于XDATA和CODE 段.
INBLOCK:定义一个L51连接后必须包含在2KB中的段,只适用于CODE段. OVERLAYABLE:定义一个可与其他段交叠的覆盖段,其段名符号必须按C51或者
PL/M51的规则命名.C51把局部数据段和局部位段定义
成?DT?FUNCTIONNAME?MODULENAME
和?BI?FUNCTIONNAME?MODULENAME这是在small模式下.其他的模式略有不同。