logo资料库

51单片机伪指令和指令详解.pdf

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
ASM-51 汇编伪指令 一、 伪指令分类 1. 符号定义 SEGMENT, EQU, SET, DATA, IDATA, XDATA, BIT, CODE 2. 存储器初始化/保留 DS, DB, DW, DBIT 3. 程序链接 PUBILC, EXTRN, NAME 4. 汇编程序状态控制 ORG, END 5. 选择段的伪指令 RSEG, CSEG, DSEG, XSEG, ISEG, BSEG, USING 二、 伪指令具体说明 1. 符号定义伪指令 1) SEGMENT 伪指令 格式:段名 SEGMENT 段类型 说明:SEGMENT 伪指令说明一个段。段就是一块程序代码或数据存储器。 允许使用的段类型为: ●CODE 代码空间 ●DATA 可以直接寻址的内部数据空间 ●XDATA 外部数据空间 ●IDATA 可以间接寻址的整个内部数据空间 ●BIT 位空间 例子:(段符号用于表达式时,代表被连接段的基地址) STACK SEGMENT IDATA RSEG STACK DS 10H ;保留 16 字节做堆栈 MOV SP , #STACK-1 ;堆栈指针初始化 1
2) EQU 伪指令 格式: 符号名 EQU 表达式 符号名 EQU 特殊汇编符号 说明:EQU 表示把一个数值或特殊汇编符号赋予规定的名字。 一个表达式赋予一个符号,必须是不带向前访问的表达式。 例子:N27 EQU 27; ACCUM EQU A ;定义 ACCUM 代替特殊汇编符号 A(累加器) HERE EQU $; HERE 为当前位置计数器的值 3) SET 伪指令 格式: 符号名 SET 表达式 符号名 SET 特殊汇编符号 说明:SET 类似 EQU,区别在于可以用另一个 SET 伪指令在以后对定义过的符号 重新定义。 例子:COUNT SET 0 COUNT SET COUNT+1 4) BIT 伪指令 格式: 符号名 BIT 位地址 说明: BIT 伪指令把一个地址赋予规定的符号名。该符号类型取段类型 BIT. 例子: RSEG DATA_SEG; CONTROL: DS 1 ALATM BIT CONTROL.0; OPEN_BOARD BIT ALATM+1 ;下一位 RESET_BOARD BIT 60H ;下一个绝对的位 5)DATA 伪指令 格式: 符号名 DATA 表达式 说明: DATA 伪指令把片内的数据地址赋予所规定的符号名。符号段类型为 DATA. 例子:CONIN DATA SBUF;定义 CONIN 到串行口缓冲器的地址 2
TABLE_BASE DATA 70H ;把 TABLE_BASE 定义到位置 70H 6)XDATA 伪指令 格式: 符号名 XDATA 表达式 说明: XDATA 伪指令把片外的数据地址赋予所规定的符号名。段类型为 XDATA. 例子: RSEG XSEG1 ORG 100H DATE DS 5;定义 DATE 在偏离 XSEG1 的 100H 处 TIME XDATA DATE+5;定义 TIME 为 DATE 后面的 5 个字节. 7)IDATA 伪指令 格式: 符号名 IDATA 表达式 说明: IDATA 伪指令将间接的内部数据地址赋予所规定的符号名。类型为 IDATA. 例子:BUFFER IDATA 60H BUFFER_LEN EQU 20H BUFFER_END IDATA BUFFER+BUFFER_LEN-1 8)CODE 伪指令 格式: 符号名 CODE 表达式 说明: CODE 伪指令把一个代码地址赋予所规定的符号名。符号段类型为 CODE。 2. 存储器初始化及保留 1)DS 伪指令 格式: 标号 DS 表达式 说明: DS 伪指令以字节为单位保留空间。可以用于除 BIT 类型段以外的任何段。 2)DBIT 伪指令 格式: 标号 DBIT 表达式 说明: DBIT 伪指令以位为单位保留空间。它仅用于 BIT 类型段。在 BIT 段中, 位置计数器的基本单位是位而不是字节。 3)DB 伪指令 3
格式: 标号 DB 表达式 说明:DB 伪指令用字节值对代码存储器初始化。段类型为 CODE 型,其表达式列 表是一个由逗号(,)分开的一个或多个字节值或串。 例子:AGE: DB ‘MARY’,0,27 ORIMES:DB 1,2,3,5 4)DW 伪指令 格式: 标号 DW 表达式 说明: DW 伪指令是用字(16 位)值对代码存储器初始化。段类型为 CODE 型。 该表达式可以是一个由逗号(,)分开的一个或多个字值,字值可为绝对的或可 重新定位的表达式。若在列表中用了位置计数器$,它计算出正被初始化字的代 码地址。列表中的每一项以它出现在该列表中的顺序放入存储器,其高字节在 前,低字节在后。 例子:ARRIVAL DW 710, ‘AM’ JUMP_TABLE DW GO_PROC,BREAK_PROC,DISPLAY_PROC;由产生地址的清单 成一个跳转表。 3. 程序的链接 1) PUBLIC 伪指令 格式:PUBLIC 符号名列表 说明:PUBLIC 伪指令允许当前被汇编模块的符号为外部公用。符号名对于一个 时,用逗号(,)分开。寄存器或段符号名(通过 SEGMENT 伪指令声明了的)不 可以规定为 PUBLIC。 例子:PUBLIC putctrl,put_data,liner 2) EXTRN 伪指令 格式:ERTRN [段类型(符号名列表)],。。。 说明:EXTRN 伪指令列出当前模块中要访问的在其他模块中定义了的符号。这个 伪指令可以出现在程序的任何地方。外部符号必须符合与上每一个符号相关的 段类型。(这些类型是 CODE,XDATA,DATA,IDATA,BIT 及 NUMBER,即一个无类型的 符号) 例子:EXTRN CODE(pntcrif,putstring,getnum),DATA(count,total) 4
EXTRN CODE(binas,ascbin),NUMBER(table-size) 3) NAME 伪指令 格式: NAME 模块名 说明:NAME 伪指令用来定义当前的程序模块,应放在该模块全部伪指令及指令 代码的前面。若无 NAME 伪指令,则源文件名作为系统对其设置的名称,但不 得以数字开始。 4. 汇编程序的状态控制 1) END 格式: END 说明:END 语句不得有标号,允许在它的行上出现一个注释。END 语句是程序 的最后一行,否则将产生一个错误。 2) ORG 格式: ORG 表达式 说明:ORG 伪指令用来对汇编程序的位置计数器做修改,以设置一个新的程序 起点。该表达式应当是一个绝对的或是可重新定位的表达式,它访问当前的段 而不含向前的访问。 ORG 伪指令改变位置计数器,但它并不产生一个新段。如果当前段为绝 对段,其值便是当前段的一个绝对地址,如果该段是可以重新定位的,其值是 当前段基地址的偏移。 例子:ORG ($+10H) AND 0FFF0H ;将位置计数器设为下一个 16 字节边界 ORG 50 :将位置计数器设置为 50 5. 段选择伪指令 可重定位段:RSEG 格式:RSEG 段名 说明:其段名一定要在前面使用 SEGMENT 伪指令定义过 绝对段: CSEG XSEG DSEG ISEG BSEG 5
格式: ●CSEG [ AT 绝对地址] ;在代码地址空间选择一个绝对段 ●XSEG [ AT 绝对地址] ;在外部数据地址空间选择一个绝对段 ●DSEG [ AT 绝对地址] ;在内部数据地址空间选择一个绝对段 ●ISEG [ AT 绝对地址] ;在间接内部数据地址空间选择一个绝对段 ●BSEG [ AT 绝对地址] ;在位地址空间选择一个绝对段 如果使用[ AT 绝对地址],汇编器便结束以前规定的绝对段并生成一个从 该地址开始的新的绝对段。如果未规定一个绝对地址,该段类型的原来绝对段 便继续生效。如果选择段类型为以前未定义的绝对段而且省略了绝对地址,则 在位置 0 开始生成一个段。 例子: BSEG AT 70H DECIMAL_MODE DBIT 1 CHAT_MIDE DBIT 1 6. USING 伪指令 格式: USING 表达式 说明: USING 伪指令通知汇编器其后面的代码所使用的寄存器组。其表达式是 一个数(0-3 之间),它指向四个寄存器组之一。 例子: USING 3 PUSH AR2 ;压入第三组的第二个寄存器 USING 1 PUSH AR2 ;压入第一组的第二个寄存器 6
51 单片机汇编指令详解 指令格式 功能简述 字节数 周 一、数据传送类指令 MOV A, Rn 寄存器送累加器 MOV Rn, A 累加器送寄存器 MOV A, @Ri 内部 RAM 单元送累加器 MOV @Ri, A 累加器送内部 RAM 单元 MOV A, #data 立即数送累加器 MOV A, direct 直接寻址单元送累加器 MOV direct, A 累加器送直接寻址单元 MOV Rn, #data 立即数送寄存器 MOV direct, #data 立即数送直接寻址单元 MOV @Ri, #data 立即数送内部 RAM 单元 MOV direct, Rn 寄存器送直接寻址单元 MOV Rn, direct 直接寻址单元送寄存器 1 1 1 1 2 2 2 2 3 2 2 2 MOV direct, @Ri 内部 RAM 单元送直接寻址单元 2 MOV @Ri, direct 直接寻址单元送内部 RAM 单元 2 MOV direct2, direct1 直接寻址单元送直接寻址单 3 元 MOV DPTR, #data16 16 位立即数送数据指针 3 MOVX A, @Ri 外部 RAM 单元送累加器(8 位地 1 址) 7 期 1 1 1 1 1 1 1 1 2 1 2 2 2 2 2 2 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 址) XCH A, Rn 累加器与寄存器交换 1 XCH A, @Ri 累加器与内部 RAM 单元交换 1 XCHD A, direct 累加器与直接寻址单元交换 2 XCHD A, @Ri 累加器与内部 RAM 单元低 4 位 1 交换 SWAP A 累加器高 4 位与低 4 位交换 1 POP direct 栈顶弹出指令直接寻址单元 2 PUSH direct 直接寻址单元压入栈顶 2 二、算术运算类指令 ADD A, Rn 累加器加寄存器 ADD A, @Ri 累加器加内部 RAM 单元 ADD A, direct 累加器加直接寻址单元 ADD A, #data 累加器加立即数 1 1 2 2 8 1 1 1 1 1 2 2 1 1 1 1
分享到:
收藏