文档视界 最新最全的文档下载
当前位置:文档视界 › 单片机伪指令和指令详解

单片机伪指令和指令详解

单片机伪指令和指令详解
单片机伪指令和指令详解

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 ;堆栈指针初始化

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 到串行口缓冲器的地址

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伪指令

格式:标号 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)

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

格式:

●CSEG [ AT 绝对地址] ;在代码地址空间选择一个绝对段

●XSEG [ AT 绝对地址] ;在外部数据地址空间选择一个绝对段

●DSEG [ AT 绝对地址] ;在内部数据地址空间选择一个绝对段

●ISEG [ AT 绝对地址] ;在间接内部数据地址空间选择一个绝对段

●BSEG [ AT 绝对地址] ;在位地址空间选择一个绝对段

如果使用[ AT 绝对地址],汇编器便结束以前规定的绝对段并生成一个从该地址开始的新的绝对段。如果未规定一个绝对地址,该段类型的原来绝对段便继续生效。如果选择段类型为以前未定义的绝对段而且省略了绝对地址,则在位置0开始生成一个段。

例子:

BSEG AT 70H

DECIMAL_MODE DBIT 1

CHAT_MIDE DBIT 1

https://www.docsj.com/doc/475687597.html,ING伪指令

格式: USING 表达式

说明: USING伪指令通知汇编器其后面的代码所使用的寄存器组。其表达式是一个数(0-3之间),它指向四个寄存器组之一。

例子:

USING 3

PUSH AR2 ;压入第三组的第二个寄存器

USING 1

PUSH AR2 ;压入第一组的第二个寄存器

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

伪指令

A51汇编解释---伪指令 2011-05-11 17:51:46| 分类:默认分类| 标签: |举报 |字号大 中 小订阅 一:定义符号的伪指令 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模式下.其他的模式略有不同。BITADDRESSABLE:定义一个L51连接后位于可位寻址的区,段长不能超过16B. 2) EQU 格式: 符号名 EQU 表达式 符号名 EQU 寄存器名 EQU伪指令定义一表示数值或寄存器的符号,该符号可用于表达式或助记符指令的操作数,EQU指令定义的符号不能被改变或重新定义,其段类型取决于表达式中的操作数类型类型,无类型的EQU符号可用于任何表达式中. LIMIT EQU 200 VALUE EQU LIMIT-100+’A’

MCS-51指令详解

MCS-51指令详解 说明:为了使MCS-51单片机初学者快速入门,迅速掌握单片机指令含意、操作码、操作数及;对应地址,汇编语言怎样编写等,现按指令操作码按顺序编写,可对照本公司编写的<>一书第145页指令手册查看,更详细资料请阅第四章 MCS-51指令系统" 及第124页指令系统摘要。并在仿真器上装入;JJM.HEX文件,并对有关单元置数,用单步(F8)验证其正确性及其运行结果。 ORG 0000H NOP ;空操作指令 AJMP L0003 ;绝对转移指令 L0003: LJMP L0006 ;长调用指令

L0006: RR A ;累加器A内容右移(先置A为88H) INC A ; 累加器A 内容加1 INC 01H ;直接地址(字节01H)内容加1 INC @R0 ; R0的内容(为地址) 的内容即间接RAM加1 ;(设R0=02H,02H=03H,单步执行后02H=04H) INC @R1 ; R1的内容(为地址) 的内容即间接RAM加1 ;(设R1=02H,02H=03H,单步执行后02H=04H) INC R0 ; R0的内容加1 (设R0为00H,单步执行后查R0内容为多少) INC R1 ; R1的内容加1(设R1为01H,单步执行后查R1内容为多少)

INC R2 ; R2的内容加1 (设R2为02H,单步执行后查R2内容为多少) INC R3 ; R3的内容加1(设R3为03H,单步执行后查R3内容为多少) INC R4 ; R4的内容加1(设R4为04H,单步执行后查R4内容为多少) INC R5 ; R5的内容加1(设R5为05H,单步执行后查R5内容为多少) INC R6 ; R6的内容加1(设R6为06H,单步执行后查R6内容为多少) INC R7 ; R7的内容加1(设R7为07H,单步执行后查R7内容为多少) JBC 20H,L0017; 如果位(如20H,即24H的0位)为1,则转移并清0该位L0017: ACALL S0019 ;绝对调用 S0019: LCALL S001C ;长调用

单片机汇编指令大全

单片机汇编指令一览表 作者:乡下人 助记符指令说明字节数周期数 (数据传递类指令) 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,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 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

51单片机指令表汇总

51单片机指令表 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器内容传送到累加器 1 1 MOV A,direct 直接地址内容传送到累加器 2 1 MOV A,@Ri 间接RAM内容传送到累加器 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 2 MOV direct,direct 直接地址传内容传送到直接地址 3 2 MOV direct,A 累加器内容传送到直接地址 2 1 MOV direct,@Ri 间接RAM内容传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 累加器内容传送到间接RAM 1 1 MOV @Ri,direct 直接地址内容传送到间接RAM 2 2 MOV @Ri,#data 立即数传送到间接RAM 2 1 MOV DPTR,#data16 16 位地址传送到数据指针 3 2 MOVC A,@A+DPTR 代码字节传送到累加器 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

单片机汇编语言指令集

汇编语言的所有指令数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2 格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O

INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位 SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

飞思卡尔单片机寄存器及汇编指令详解

附录I:寄存器地址列表 直接页面寄存器总结

高页面寄存器总结

非易失寄存器总结 注:直接页面寄存器表地址的低字节用粗体显示,直接寻址对其访问时,仅写地址低字节即可。第2列中寄存器名用粗体显示以区别右边的位名。有0的单元格表示未用到的位总是读为0,有破折号的单元格表示未用或者保留,对其读不定。

附录II 指令接与寻址方式 HCS08指令集概括 运算符 () = 括号种表示寄存器或存储器位置的内容 ← = 用……加载(读: “得到”) & = 布尔与 | = 布尔或 ⊕= 布尔异或 ×= 乘 ÷ = 除 : = 串联 + = 加 - = 求反(二进制补码) CPU registers A =>累加器 CCR =>条件代码寄存器 H =>索引寄存器,高8位 X => 索引寄存器,低8位 PC =>程序计数器 PCH =>程序计数器,高8位 PCL =>程序计数器,低8位 SP =>堆栈指针 存储器和寻址 M =>一个存储区位置或者绝对值数据,视寻址模式而定 M:M + 0x0001 => 两个连续存储位置的16位值.高8位位于M的地址,低8位位于更高的连续地址. 条件代码寄存器(CCR)位 V => 二进制补码溢出指示,第7位 H => 半进位,第4位 I => 中断屏蔽,第 3位 N => 求反指示器, 第2位 Z => 置零指示器, 第1位 C => 进/借, 第0位 (进位第 7位 ) CCR工作性符号 – => 位不受影响 0 = > 位强制为0 1 = > 位强制为1

= >根据运算结果设置或清除位 U = > 运算后没有定义 机器编码符号 dd =>一个直接寻址0x0000–0x00FF的低8位(高字节假设为0x00) ee => 16位偏移量的高8位 ff => 16位偏移量的低8位 ii => 立即数的一个字节 jj => 16位立即数值的高位字节 kk => 16位立即数值的低位字节 hh => 16位扩展寻址的高位字节 ll => 16位扩展寻址的低位字节 rr => 相对偏移量 n —任何表达范围在0–7之间的一个有符号数的标号或表达式 opr8i —任何一个表达8位立即值的标号或表达式 opr16 —任何一个表达16位立即值的标号或表达式 opr8a —任何一个表达一个8位值的标号或表达式.指令对待这个8位值为直接页面64K 字节地址空间(0x00xx)中地址的低8位. opr16a —任何一个表达16位值的标号或表达式.指令对待这个值为直接页面64K字节地址空间. oprx8 —任何一个表达8位无符号值的标号或表达式,用于索引寻址. oprx16 —任何一个16位值的标号或表达式.因为HCS08有一个16位地址总线,这可以为一个有符号或者无符号值. rel —任何指引在当前指令目标代码最后一个字节之后–128 to +127个字节之内的标号或表达式.汇编器会计算包括当前指令目标代码在内的8位有符号偏移量. 寻址方式 隐含寻址(Inherent)如CLRA,只有操作码,无操作数,需要操作的数据一般为CPU寄存器,因此不需要再去找操作数了。(INH) 立即寻址 (Immediate)如LDA #$0A,“$”表示16进制,此时操作数位于FLASH空间,与程序一起存放。(IMM) 直接寻址 (Direct)如 LDA $88,只能访问$0000-$00FF的存储器空间,指令短速度快; (DIR) 扩展寻址 (Extended)如果操作数地址超出了$00FF,自动为扩展寻址;(EXT) 相对寻址(Relative)如BRA LOOP,指令中一般给出8位有符号数表示的偏移量。(REL) 变址寻址 (Indexed) 采用[H:X]或SP作为指针的间接寻址方式。( IX )( IX1 )( IX2 ) 变址寻址 (Indexed) 1〉无偏移量:CLR ,X 简写(IX) 2〉无偏移量,指令完成后指针加1(H:X = H:X + 0x0001) ,简写(IX+)只用于指令MOV和CBEQ指令中;

PIC单片机汇编语言基础

PIC单片机汇编语言基础 1、程序的基本格式 先介绍二条伪指令: EQU ——标号赋值伪指令 ORG ——地址定义伪指令 PIC16C5X在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为: PIC16C54/55:1FFH PIC16C56:3FFH PIC16C57/58:7FFH 一般来说,PIC的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。但这里我们推荐一种清晰明了的格式供参考。 TITLE This is …… ;程序标题 ;-------------------------------------- ;名称定义和变量定义 ;-------------------------------------- F0 EQU 0 RTCC EQU 1 PC EQU 2 STATUS EQU 3 FSR EQU 4

RA EQU 5 RB EQU 6 RC EQU 7 ┋ PIC16C54 EQU 1FFH ;芯片复位地址 PIC16C56 EQU 3FFH PIC16C57 EQU 7FFH ;----------------------------------------- ORG PIC16C54 GOTO MAIN ;在复位地址处转入主程序ORG 0 ;在0000H开始存放程序 ;----------------------------------------- ;子程序区 ;----------------------------------------- DELAY MOVLW 255 ┋ RETLW 0 ;------------------------------------------ ;主程序区 ;------------------------------------------ MAIN MOVLW B‘00000000’ TRIS RB ;RB已由伪指令定义为6,即B

单片机指令表(最全)

单片机指令以A开头的指令有18条,分别为: 1、ACALL addr11 指令名称:绝对调用指令 指令代码:A10 A9 A8 10001 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。操作内容: PC←(PC)+2SP←(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 影响标志位:C,AC,OV 4、ADD A,@Ri ’ 指令名称:间接寻址加法指令指令代码:26H~27H 指令功能:累加器内容与内部RAM低128单元内容相加 操作内容:A←(A)+((Ri)),i=0,1 字节数: 1 机器周期:1 影响标志位:C,AC,OV 5、ADD A,#data 指令名称:立即数加法指令指令代码:24H 指令功能:累加器内容与立即数相加 操作内容:A←(A)+data 字节数: 2 机器周期:1 影响标志位:C,AC,OV 6、ADDC A,Rn 指令名称:寄存器带进位加法指令指令代码:38H~3FH 指令功能:累加器内容、寄存器内容和进位位相加 操作内容:A←(A)+(Rn)+(C),n=0~7 影响标志位:C,AC,OV 7、ADDC A,direct 指令名称:直接寻址带进位加法指令指令代码:35H 指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加 操作内容:A←(A)+(direct)+(C) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 8、ADDC A,@Ri 指令名称:间接寻址带进位加法指令指令代码:36H~37H 指令功能:累加器内容, 内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C),i=0,1 字节数: 1 机器周期:1 影响标志位:C,AC,OV 9、ADDC A,#data 指令名称:立即数带进位加法指令指令代码:34H 指令功能:累加器内容、立即数及进位位相加 操作内容:A←(A)+data+(C) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 10、AJMP addr11 指令名称:绝对转移指令 指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,实现程序转移。其方法是以指令提供的11位地址,取代PC的低11位,.而PC的高5位保持不变。操作内容:PC←(PC)+2PCl0~0←addrll 字节数: 2 机器周期:2 使用说明:由于addrll的最小值是000H,最大值是7FFH,因此地址转移范围是2KB。 11、ANL A,Rn 指令名称:寄存器逻辑与指令指令代码:58H~5FH 指令功能:累加器内容逻辑与寄存器内容 操作内容:A←(A)∧(Rn),n=0~7 字节数: 1 机器周期:1 12、ANL A,direct 指令名称:直接寻址逻辑与指令指令代码:55H 指令功能:累加器内容逻辑与内部RAM低128单元或专用寄存器内容 操作内容:A←(A)

单片机伪指令和指令详解

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 ;堆栈指针初始化

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 到串行口缓冲器的地址

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,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 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

51单片机汇编指令及伪指令小结

51单片机汇编指令小结

二、算术运算类指令

四、控制转移类指令类

五、位操作类指令 逻辑操作与字节中的一致

51汇编常用伪指令 https://www.docsj.com/doc/475687597.html, 16位地址:此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址; 2.【标号】DB 字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG:DB 88H,100,``7" , ``C"; 3.【标号】DW 双字节数据项表:定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。例如:TAB:DW 1234H, 7BH 名字EQU 表达式或名字=表达式:用于给一个表达式赋值或给字符串起名字。之后名字可用作程序地址,数据地址或立即数地址使用。名字必须是一字母开头的字母数据串。例如:COUNT=10或SPACE EQU 10H 5.名字DATA 直接字节地址:给8位内部或外部RAM单元起个名字,名字必须是一字母开头的字母数据串。同一单元可起多个名字。例如:ERROR DATA 80H 6.XDATA直接字节地址:给8位外部RAM起个名字,名字规定同DATA伪指令。例如:IO_POTR XDATA OCF04H 7.名字Bit 指令:给一位可寻址的位单元起个名字,规定同DATA伪指令。例如:SWT BIT 30H 8.【标号】END:指出源程序到此结束,汇编对其后的程序语句不予理睬。源程序只在主程序最后使用一个END。 注:DATA和EQU的区别在于用DATA定义的字符名称作为标号登记在符号表中,故可先使用后定义;而用EQU定义的字符名称必须先定义后使用,其原因是EQU不定义在符号表中。

单片机电路图详解

单片机:交通灯课程设计(一)(2007-04-21 13:28:54) 目录 摘要--------------------------------------------------------- 1 1.概述 -------------------------------------------------------- 2 2.硬件设计----------------------------------------------------- 3 2.1单片机及其外围--------------------------------------------3 2.1.1单片机的选择-----------------------------------------3 2.1.2单片机的特点及其应用范围----------------------------- 3 2.1.3存储器的扩展----------------------------------------- 4 2.1.4内存的扩展------------------------------------------- 6 2.1.5MCS-52的I/O接口扩展--------------------------------- 8 2.2电路部分--------------------------------------------------11 2.2.1元器件选用-------------------------------------------11 2.2.2电路完成功能-----------------------------------------13 3.软件设计------------------------------------------------------15 3.1软件概述-------------------------------------------------15 3.2汇编语言指令说明-----------------------------------------16 3.3定时/计数器的原理----------------------------------------16 3.3.1定时/计数器的概述-----------------------------------16 3.3.2 8255A片选及各端口地址-------------------------------18 3.3.3信号控制码------------------------------------------18 3.3.4工作方式寄存器--------------------------------------19 3.3.5定时/计数器初值及定时器T0的工作方式----------------20

(完整版)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位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

51单片机教程:单片机逻辑与或异或指令详解

51单片机教程:单片机逻辑与或异或指令详解 ANL A,Rn ;A 与Rn 中的值按位’与’,结果送入A 中 ANL A,direct;A 与direct 中的值按位’与’,结果送入A 中 ANL A,@Ri;A 与间址寻址单元@Ri 中的值按位’与’,结果送入A 中 ANL A,#data;A 与立即数data 按位’与’,结果送入A 中 ANL direct,A;direct 中值与A 中的值按位’与’,结果送入direct 中 ANL direct,#data;direct 中的值与立即数data 按位’与’,结果送入direct 中。这几条指令的关键是知道什么是逻辑与。这里的逻辑与是指按位与 例:71H 和56H 相与则将两数写成二进制形式: (71H)01110001 (56H)00100110 结果00100000 即20H,从上面的式子可以看出,两个参与运算的值只要其中有一个位上是0,则这位的结果就是0,两个同是1,结果才是1。 理解了逻辑与的运算规则,结果自然就出来了。看每条指令后面的注释 下面再举一些例子来看。 MOV A,#45H;(A)=45H MOV R1,#25H;(R1)=25H MOV 25H,#79H;(25H)=79H ANL A,@R1;45H 与79H 按位与,结果送入A 中为41H (A)=41H ANL 25H,#15H;25H 中的值(79H)与15H 相与结果为(25H)=11H)ANL 25H,A;25H 中的值(11H)与A 中的值(41H)相与,结果为(25H)=11H 在知道了逻辑与指令的功能后,逻辑或和逻辑异或的功能就很简单了。逻辑或是按位或,即有1 为1,全0 为0。例:

单片机指令大全

一、数据传输指令 ─────────────────────────── ──────────── 在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVX 调用片外数据 MOVC调用片内数据. PUSH 把字压入堆栈. POP 把字弹出堆栈. SWAP 交换8位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) XLAT 字节查表转换. 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535. 二、算术运算指令 ─────────────────────────── ──────────── ADD 加法. ADC 带进位加法. INC 加1. DAA 加法的十进制调整. SUB 减法. SBB 带借位减法. DEC 减1. NEC 求反(以0 减之). CMP 比较.(两操作数作减法,仅修改标志位,不回送结果). AAS 减法的ASCII码调整. DAS 减法的十进制调整. MUL 无符号乘法. IMUL 整数乘法. 以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), DIV 无符号除法. IDIV 整数除法. 三、逻辑运算指令 ─────────────────────────── ──────────── AND 与运算. or 或运算. XOR 异或运算. NOT 取反. ROL 循环左移. ROR 循环右移. RCL 通过进位的循环左移. RCR 通过进位的循环右移. 以上四种移位指令,其移位次数可达255次. 五、程序转移指令 ─────────────────────────────────────── 1>无条件转移指令(长转移) JMP 无条件转移指令 CALL 过程调用 RET/RETF过程返回. 2>条件转移指令(短转移,-128到+127的距离内) ( 当且仅当(SF XOR OF)=1时,OP1循环控制指令(短转移) LOOP CX不为零时循环. 4>中断指令 INT 中断指令 INTO 溢出中断 IRET 中断返回 5>处理器控制指令 NOP 空操作. 六、伪指令 END 程序结束.

常用51单片机汇编指令

常用单片机汇编指令: 1 .MOV A,Rn寄存器内容送入累加器 2 .MOV A,direct 直接地址单元中的数据送入累加器 3 .MOV A,@Ri (i=0,1) 间接RAM中的数据送入累加器 4 .MOV A,#data 立即数送入累加器 5 .MOV Rn,A累加器内容送入寄存器 6 .MOV Rn,direct 直接地址单元中的数据送入寄存器 7 .MOV Rn,#data 立即数送入寄存器 8 .MOV direct,A 累加器内容送入直接地址单元 9 .MOV direct,Rn 寄存器内容送入直接地址单元 10. MOV direct,direct 直接地址单元中的数据送入另一个 直接地址单元 11 .MOV direct,@Ri (i=0,1) 间接RAM中的数据送入直接地址单元 12 MOV direct,#data 立即数送入直接地址单元 13 .MOV @Ri,A (i=0,1) 累加器内容送间接RAM单元 14 .MOV@Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元 15 .MOV @Ri,#data (i=0,1) 立即数送入间接RAM单元 16 .MOV DPTR,#data16 16 位立即数送入地址寄存器 17 .MOVC A,@A+DPTR以DPTR^基地址变址寻址单元中的数 据送入累加器

18 .MOVC A,@A+PC以PC为基地址变址寻址单元中的数据送入累加器 19 .MOVX A,@Ri (i=0,1) 外部RAM(8位地址)送入累加器 20 .MOVX A,@DPTR外部RAM(16位地址)送入累加器 21 .MOVX @Ri,A (i=0,1) 累计器送外部RAM(8位地址) 22 .MOVX @DPTR,A累计器送外部RAM( 16位地址) 23 .PUSH direct 直接地址单元中的数据压入堆栈 24 .POP direct 弹栈送直接地址单元 25 .XCH A,Rn 寄存器与累加器交换 26 .XCH A,direct 直接地址单元与累加器交换 27 .XCH A,@Ri (i=0,1) 间接RAM与累加器交换 28 .XCHD A,@Ri (i=0,1) 间接RAM的低半字节与累加器交换算术操作类指令: 1. ADD A,Rn 寄存器内容加到累加器 2 .ADD A,direct 直接地址单元的内容加到累加器 3 A.DD A,@Ri (i=0,1) 间接ROM的内容加到累加器 4 .ADD A,#data 立即数加到累加器 5 .ADDC A,Rn寄存器内容带进位加到累加器 6 .ADDC A,direct 直接地址单元的内容带进位加到累加器 7 .ADDC A,@Ri(i=0,1) 间接ROM的内容带进位加到累加器 8 .ADDC A,#data 立即数带进位加到累加器

相关文档