IC8位单片机汇编语言常用指令的识读
IC8位单片机汇编语言常用指令的识读
PIC单片机指令集简介PIC 8位单片机共有三个级别,有相对应的指令集。
基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。
其指令向下兼容。
一、PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作码助记符操作数1,操作数2;注释指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。
1与MCS-51系列单片机功能相同,标号代表指令的符号地址。
在程序汇编时,已赋以指令存储器地址的具体数值。
汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。
标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。
在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。
指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。
书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。
再有标号不能用操作码助记符和寄存器的代号表示。
标号也可以单独占一行。
2该字段是指令的必选项。
该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。
3由操作数的数据值或以符号表示的数据或地址值组成。
若操作数有两个,则两个操作数之间用逗号(,)分开。
当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。
还可以是被定义过的标号、字符串和ASCⅡ码等。
具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。
单片机指令大全
引言概述:单片机指令是嵌入式系统设计中至关重要的一部分,它们定义了单片机的功能和操作。
本文是单片机指令大全系列的第二部分,旨在提供更多全面的单片机指令信息,帮助读者更好地理解和应用单片机指令。
正文内容:一、移位指令1.逻辑左移指令:将操作数的每一位向左移动一位,并且最低位填充0。
2.逻辑右移指令:将操作数的每一位向右移动一位,并且最高位填充0。
3.算术右移指令:将操作数的每一位向右移动一位,并且最高位保持不变。
4.循环左移指令:将操作数的每一位向左循环移动一位,即最高位移动到最低位。
5.循环右移指令:将操作数的每一位向右循环移动一位,即最低位移动到最高位。
二、逻辑运算指令1.逻辑与指令:对操作数进行逻辑与运算,将两个二进制数对应位上的值进行逻辑与操作。
2.逻辑或指令:对操作数进行逻辑或运算,将两个二进制数对应位上的值进行逻辑或操作。
3.逻辑非指令:对操作数进行逻辑非运算,将二进制数的每一位取反。
4.逻辑异或指令:对操作数进行逻辑异或运算,将两个二进制数对应位上的值进行逻辑异或操作。
5.逻辑移位指令:将操作数进行逻辑左移或右移。
三、算术运算指令1.加法指令:对操作数进行加法运算,并将运算结果保存到指定的寄存器或存储器中。
2.减法指令:对操作数进行减法运算,并将运算结果保存到指定的寄存器或存储器中。
3.乘法指令:对操作数进行乘法运算,并将运算结果保存到指定的寄存器或存储器中。
4.除法指令:对操作数进行除法运算,并将运算结果保存到指定的寄存器或存储器中。
5.移位指令:对操作数进行移位运算,包括算术左移、算术右移、循环左移和循环右移。
四、输入输出指令1.读取输入指令:从指定的输入设备读取数据,并将数据保存到指定的寄存器或存储器中。
2.输出显示指令:将指定的数据从寄存器或存储器中读取,并显示到指定的输出设备上。
3.端口输入指令:从指定的端口读取数据,并将数据保存到指定的寄存器或存储器中。
4.端口输出指令:将指定的数据从寄存器或存储器中读取,并输出到指定的端口上。
汇编语言指令详解
汇编语言指令详解汇编语言是一种低级语言,它直接操作计算机的硬件。
与高级语言相比,汇编语言更具操作性,可以更精确地控制计算机的执行过程。
在编写汇编语言程序时,我们需要使用指令来完成各种操作,并且对不同的指令进行详细的了解。
本文将详细介绍一些常用的汇编语言指令及其功能。
一、数据传输指令数据传输指令用于在寄存器间传输数据或将数据从寄存器传送到内存中。
常用的数据传输指令包括MOV、LDA、STA等。
MOV指令用于将数据从一个寄存器传送到另一个寄存器。
例如,MOV AX, BX表示将寄存器BX中的数据传送到寄存器AX中。
LDA指令用于将一个内存单元的数据传送到累加器中。
例如,LDA 1000H将内存单元1000H中的数据传送到累加器中。
STA指令用于将累加器的数据传送到一个内存单元中。
例如,STA 2000H将累加器中的数据传送到内存单元2000H中。
二、算术运算指令算术运算指令用于对数据进行加、减、乘、除等运算操作。
常用的算术运算指令包括ADD、SUB、MUL、DIV等。
ADD指令用于将两个操作数相加,并将结果存储在目的操作数中。
例如,ADD AX, BX表示将寄存器AX和寄存器BX的数据相加,并将结果存储在寄存器AX中。
SUB指令用于将目的操作数减去源操作数,并将结果存储在目的操作数中。
例如,SUB AX, BX表示将寄存器AX减去寄存器BX的数据,并将结果存储在寄存器AX中。
MUL指令用于执行无符号整数乘法运算。
例如,MUL AX, BX表示将寄存器AX和寄存器BX的数据相乘,并将结果存储在寄存器AX 中。
DIV指令用于执行无符号整数除法运算。
例如,DIV AX, BX表示将寄存器AX的数据除以寄存器BX的数据,并将商存储在寄存器AX 中,余数存储在寄存器DX中。
三、逻辑运算指令逻辑运算指令用于对数据进行逻辑操作,如与、或、非、位移等。
常用的逻辑运算指令包括AND、OR、NOT、SHL等。
AND指令用于对两个操作数执行位与操作,并将结果存储在目的操作数中。
汇编语言各种指令解释及用法2篇
汇编语言各种指令解释及用法2篇汇编语言指令解释及用法汇编语言是一种低级编程语言,用于编写机器指令,直接控制计算机硬件。
它的指令集相对简单,但是非常灵活,可以直接操作寄存器和内存,实现各种功能。
在这篇文章中,我将为大家解释汇编语言中一些常用指令的含义和用法。
第一篇:数据传输与操作指令1. MOV指令:MOVE(MOV)指令用于在寄存器和内存之间传输数据。
例如,MOV AX, BX将BX的值传输到AX寄存器中。
2. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在目标操作数中。
例如,ADD AX, 5将AX寄存器的值与5相加,并将结果存储在AX中。
3. SUB指令:SUB指令用于将两个操作数相减,并将结果存储在目标操作数中。
例如,SUB AX, 3将AX寄存器的值减去3,并将结果存储在AX中。
4. INC指令:INC指令用于将目标操作数的值加1。
例如,INC CX将CX寄存器的值增加1。
5. DEC指令:DEC指令用于将目标操作数的值减1。
例如,DEC DX将DX寄存器的值减去1。
6. MUL指令:MUL指令用于将两个无符号操作数相乘,结果保存在一对寄存器中。
例如,MUL BX将AX寄存器的值与BX相乘,并将结果保存在DX:AX寄存器对中。
7. DIV指令:DIV指令用于将两个无符号操作数相除,商保存在AL中,余数保存在AH中。
例如,DIV CX将DX:AX寄存器对的值除以CX,并将商保存在AL中,余数保存在AH中。
8. CMP指令:CMP指令用于比较两个操作数的值,并设置相应的标志位。
例如,CMP AX, BX将AX寄存器的值与BX进行比较。
第二篇:跳转指令与循环指令1. JMP指令:JMP指令用于无条件跳转到目标地址。
例如,JMP LABEL将程序跳转到标签LABEL处执行。
2. JZ指令:JZ指令用于判断前一次的比较结果是否为零,如果为零则跳转到目标地址。
例如,JZ LABEL将在前一次比较结果为零时跳转到标签LABEL处。
单片机汇编指令
单片机汇编指令单片机(Microcontroller)是一种集成了微处理器和其他外设的集成电路芯片,用于控制各种电子设备。
在单片机的开发过程中,编程是必不可少的一部分,而汇编语言是一种常用于单片机编程的低级语言。
汇编语言是一种和机器语言十分接近的编程语言,使用简单的助记符(Mnemonic)来代表机器指令,方便程序员进行编程。
在单片机开发中,汇编语言的指令集是非常重要的知识,掌握好单片机的汇编指令对于编写高效、性能优良的程序至关重要。
本文将介绍一些常见的单片机汇编指令,供大家参考和学习。
一、数据传输指令1. MOV 指令:将数据从一个存储器位置或寄存器传输到另一个存储器位置或寄存器。
例如:MOV A, B ;将B的值传送给A寄存器MOV R1, #20 ;将数值20传送给R1寄存器2. LDA 和 STA 指令:分别用于将数据从存储器加载到累加器和将累加器中的数据存储到存储器中。
例如:LDA 0x20 ;将地址为0x20的存储器单元的数据加载到累加器STA 0x30 ;将累加器中的数据存储到地址为0x30的存储器单元3. XCH 指令:用于交换两个存储器位置或寄存器的数据。
例如:XCH A, B ;交换A和B寄存器的值二、算术指令1. ADD 和 SUB 指令:分别用于将数据相加和相减。
例如:ADD A, B ;将A和B的值相加,并将结果存储到A寄存器SUB A, B ;将B的值从A中减去,并将结果存储到A寄存器2. INC 和 DEC 指令:分别用于将数据递增和递减。
例如:INC A ;将A的值递增1DEC A ;将A的值递减1三、逻辑指令1. AND、OR 和 XOR 指令:分别用于进行逻辑与、逻辑或和逻辑异或操作。
例如:AND A, B ;将A和B的值进行逻辑与操作,并将结果存储到A寄存器OR A, B ;将A和B的值进行逻辑或操作,并将结果存储到A寄存器XOR A, B ;将A和B的值进行逻辑异或操作,并将结果存储到A寄存器2. NOT 指令:用于对一个存储器位置或寄存器中的数据进行逻辑非操作。
单片机汇编指令集合(中英指令翻译)
一、数据传送类指令(8种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;P55PUSH (Push onto Stack) 入栈;PUSH directPOP (Pop from Stack) 出栈;POP directXCH (Exchange) 字节交换;XCH A,源/@RiXCHD (Exchange low-order Digit) 低半字节交换;同上SWAP (Swap) 低4位与高4位交换;SWAP A MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVC A,@A+DPTR/PC MOVX (Move External RAM) 对外部RAM的数据传送;MOVX @DPTR,A MOVX A,@DPTR/@Ri MOVX @Ri,A二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;INC(Increment) 加1;INC A/Rn/direct/@Ri/源/DPTRDA(Decimal Adjust) 十进制调整;SUBB(Subtract with Borrow) 带借位减法;DEC(Decrement) 减1;DEC A/Rn/direct/@Ri/源MUL(Multiplication、Multiply) 乘法;MUL AB 高B,低A。
Cy=0 大于256,OV=1 DIV(Division、Divide) 除法;DIV AB 商A,余B。
Cy=0 OV=B(同上)三、逻辑运算类指令(9种助记符)CLR(Clear) 清零;CLR ACPL(Complement) 取反;CPL ARL(Rotate left) 循环左移;(同上)RLC(Rotate Left throught the Carry flag) 带进位循环左移;(同上)RR(Rotate Right) 循环右移;(同上)RRC (Rotate Right throught the Carry flag) 带进位循环右移;(同上)ANL(AND Logic) 逻辑与;ANL A,#data/Rn/direct/@Ri ANL direct,A/#dataORL(OR Logic) 逻辑或;ORL A,#data/Rn/direct/@Ri ANL direct,A/#dataXRL(Exclusive-OR Logic) 逻辑异或;(同上)四、位操作指令(6种助记符)MOV 位数据传送指令;MOV C,bit MOV bit,CCLR 位清零;C bitSETB(Set Bit)位置1;C bitCPL位取反;(同上)ANL位逻辑运算指令;ANL C,bit//bitORL位逻辑或运算指令;(同上)五、控制转移类指令(18种助记符)AJMP(Absolute Jump)绝对转移;AJMP addr11/ LABELLJMP(Long Jump)长转移;(同上)SJMP(Short Jump)短转移;SJMP rel/ LABELJMP间接转移指令; JMP @A+DPTRJZ (Jump if Zero)结果为0则转移;JZ rel/ LABELJNZ (Jump if Not Zero) 结果不为0则转移;(同上)CJNE (Compare Jump if Not Equal)比较不相等则转移;CJNE A,direct,rel/ LABEL CJNE A/Rn/@Ri,#data,rel/ LABELJC (Jump if the Carry flag is set)有进位则转移;JC rel/ LABELJNC (Jump if Not Carry)无进位则转移;(同上)JB (Jump if the Bit is set)位为1则转移;JB bit, rel/ LABELJNB (Jump if the Bit is Not set) 位为0则转移;(同上)JBC(Jump if the Bit is set and Clear the bit) 为1则转移,并清除该位;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;DJNZ Rn,rel/ LABEL DJNZ direct,rel/ LABELLCALL(Long subroutine Call)子程序长16调用;LCALL addr16/ SUBROUTINEACALL(Absolute subroutine Call)子程序绝对11调用;(同上)RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;NOP (No Operation) 空操作;8种常用伪指令1.ORG 16位地址;此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址。
单片机指令快速记忆法 _secret
单片机指令快速记忆法学习单片机,除了搞清单片机内部功能、存储空间分配及I/O接口外,还应掌握其指令系统。
MCS-51共有111条指令,现介绍我们总结出的快速记忆MCS-51指令的方法,供大家参考。
大家都知道,汇编语言指令由操作码、操作数两部分组成。
MCS-51使用汇编语言指令,它共有44个操作码助记符,33种功能,其操作数有#data、direct、Rn、@Ri等。
这里先介绍指令助记符及其相关符号的记忆方法。
一、助记符号的记忆方法1 表格列举法把44个指令助记符按功能分为五类,每类列表记忆。
此处从略,请读者自己总结。
2 英文还原法单片机的操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆。
例如:增量 INC-Incremect 减量 DNC-Decrement短转移 SJMP-Short jump 长转移 LJMP-Long jump比较转移 CJNE-Compare jump not equality绝对转移 AJMP-Absolute jump 空操作 NOP-No operation交换 XCH-Exchange 加法ADD-Addition乘法 MUL-Multiplication 除法 DIV-Division左环移 RL-Rotate left 进位左环移 RLC-Rotateleft carry右环移 RR-Rotate right 进位右环移RRC-Rotateright carry3 功能模块记忆法单片机的44个指令助记符,按所属指令功能可分为五大类,每类又可以按功能相似原则为2~3组。
这样,化整为零,各个击破,实现快速记忆。
1)数据传送组。
2)加减运算组MOV 内部数据传送 ADD 加法MOVC 程序存储器传送 ADDC 带进位加法MOVX 外部数据传送 SUBB 带进位减法3)逻辑运算组。
4)子程序调用组。
ANL 逻辑与 LCALL 长调用ORL 逻辑或 ALALL 绝对调用XRL 逻辑异或RET 子程序返回二、指令的记忆方法1 指令操作数的有关符号MCS-51的寻址方式共有六种:立即数寻址、直接寻址、寄存器寻址、寄存器间址、变址寻址、相对寻址。
PIC8位单片机汇编语言常用指令
PIC8 位单片机汇编语言常用指令
各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。
PIC 8 位单片机共有三个级别,有相对应的指令集。
基本级PIC 系列芯片共有指令33 条,每条指令是12 位字长;中级PIC 系列芯片共有指令35 条,每条指令是14 位字长;高级PIC 系列芯片共有指令58 条,每条指令是16 位字长。
其指令向下兼容。
在这里笔者介绍PIC 8 位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。
一、PIC 单片机汇编语言指令格式
PIC 系列微控制器汇编语言指令与MCS-51 系列单片机汇编语言一样,每条汇编语言指令由4 个部分组成,其书写格式如下:
标号操作码助记符操作数1,操作数2;注释
指令格式说明如下:指令的4 个部分之间由空格作隔离符,空格可以是1 格或多格,以保证交叉汇编时,PC 机能识别指令。
1 标号与MCS-51 系列单片机功能相同,标号代表指令的符号地址。
在。
单片机常用指令
单片机常用指令在单片机编程中,常用的指令是一种用于控制微处理器和外围设备工作的基本命令。
掌握常用指令对于单片机的开发和应用至关重要。
本文将介绍一些常用的单片机指令,以帮助读者更好地理解和应用单片机。
一、数据传输指令1. MOVMOV指令用于将一个操作数的值传送到另一个操作数,格式为MOV 目的操作数,源操作数。
例如:MOV A,B表示将寄存器B中的值传送到寄存器A中。
2. LDA和STALDA指令用于将一个内存单元的值传送到累加器A中,格式为LDA 内存单元地址。
例如:LDA 0x1234表示将0x1234地址处的数据传送到累加器A中。
STA指令与LDA相反,用于将累加器A的值传送到一个内存单元中,格式为STA 内存单元地址。
3. LXILXI指令用于将一个16位的立即数装入16位寄存器,格式为LXI 寄存器对,16位立即数。
例如:LXI BC,0x1234表示将0x1234装入BC寄存器。
二、算术逻辑指令1. ADD和SUBADD指令用于将一个操作数的值与累加器A的值相加,结果存放在累加器A中,格式为ADD 操作数。
例如:ADD B表示将寄存器B的值与累加器A的值相加。
SUB指令与ADD相反,用于将一个操作数的值减去累加器A的值,结果存放在累加器A中,格式为SUB 操作数。
2. INR和DCRINR指令用于将一个操作数的值增加1,格式为INR 操作数。
例如:INR C表示将寄存器C的值加1。
DCR指令与INR相反,用于将一个操作数的值减1,格式为DCR操作数。
3. AND和ORAND指令用于将一个操作数的值与累加器A的值按位与运算,结果存放在累加器A中,格式为AND 操作数。
例如:AND D表示将寄存器D的值与累加器A的值按位与运算。
OR指令与AND相反,用于将一个操作数的值与累加器A的值按位或运算,结果存放在累加器A中,格式为OR 操作数。
三、分支指令1. JMPJMP指令用于无条件地跳转到指定的内存地址,格式为JMP 内存地址。
汇编语言常用指令大全
汇编语言常用指令大全汇编语言是一种计算机编程语言,使用指令来控制计算机硬件执行特定的操作。
在本文中,我们将介绍一些常用的汇编语言指令,以帮助读者更好地理解和学习汇编语言。
一、数据传输指令1. MOV:将数据从一个位置复制到另一个位置。
例子:MOV AX, BX 将寄存器BX中的值复制到寄存器AX中。
2. PUSH:将数据压入堆栈。
例子:PUSH AX 将寄存器AX中的值压入堆栈。
3. POP:从堆栈中弹出并获取数据。
例子:POP AX 从堆栈中弹出一个值,并将其存入寄存器AX中。
二、算术指令1. ADD:将两个操作数相加。
例子:ADD AX, BX 将寄存器AX和BX中的值相加,并将结果存入寄存器AX中。
2. SUB:将一个操作数从另一个操作数中减去。
例子:SUB AX, BX 将寄存器BX中的值从寄存器AX中减去,并将结果存入寄存器AX中。
3. MUL:将两个操作数相乘。
例子:MUL AX, BX 将寄存器AX和BX中的值相乘,并将结果存入寄存器AX中。
三、逻辑指令1. AND:进行逻辑与操作。
例子:AND AX, BX 对寄存器AX和BX中的值进行逻辑与操作,并将结果存入寄存器AX中。
2. OR:进行逻辑或操作。
例子:OR AX, BX 对寄存器AX和BX中的值进行逻辑或操作,并将结果存入寄存器AX中。
3. NOT:进行逻辑非操作。
例子:NOT AX 对寄存器AX中的值进行逻辑非操作。
四、条件分支指令1. JMP:无条件跳转到指定的地址。
例子:JMP label 跳转到标记为label的地址。
2. JZ:当操作数为零时跳转到指定的地址。
例子:JZ label 如果寄存器AX中的值为零,则跳转到标记为label 的地址。
3. JC:当进位标志为1时跳转到指定的地址。
例子:JC label 如果进位标志位为1,则跳转到标记为label的地址。
五、循环指令1. LOOP:当计数器不为零时,循环执行指定的代码块。
PIC8位单片机汇编语言常用指令的识读(中)
PIC8位单片机汇编语言常用指令的识读(中)三、面向字节、常数与控制操作的指令1?传送立即数至工作寄存器W指令指令格式:MOVLW k;k表示常数、立即数和标号说明:MOVLW是Move Literal to w的缩写实例:MOVL 0x1E;常数30送W2?I/O口控制寄存器TRIS设置指令指令格式;TRIS f说明;TRIS f是Load TRIS Register的缩写。
其功能是把工作寄存器W的内容送入I/O口控制寄存器f。
当W=0时,置对应I/O口为输出;W=1,置I/O口为输入。
实例:MOVLW 0x00 ;把00H送入WTRIS RA ;置PIC RA口为输出MOVLW 0xFF ;把FFH送入WTRIS RB ;置PIC RB口为输入说明:这是PIC汇编语言中常用的几条指令,即设置某个I/O口(这里是RA口和RB口)为输入或输出的语句。
可见,识读指令时,一应充分理解语句格式的功能,二应前后联系阅读。
3?W寄存器内容送寄存器f(W内容保持不变)指令指令格式:MOVWF f说明:MOVWF是Move W to f的缩写实例:MOVLW 0x0B;送0BH送WMOVWF 6 ;送W内容到RB口说明:第一条指令0x0B(常数11)送工作寄存器W,第二条指令,把W内容常数11送到寄存器F6中,查表F6即为RB口,所以PORT_ B(B口)=0BH=D114?寄存器f传送指令指令格式:MOVF f,d说明:MOVF是Move f的缩写。
F代表PIC中的某个寄存器。
指令中的d规定:d=0时,f内容送W;d=1时,f内容送寄存器。
实例:MOVF 6,0 ;RB口内容送WMOVWF 8;RB口内容送f8说明:第一条指令中的6代表寄存器f=6,查寄存器表f=6为RB口;0代表d=0,代表选择的目标为寄存器W。
第二条指令中的8代表寄存器f=8。
所以两条指令结果是把RB口的内容送f8。
至于f8内容是多少?还应在汇编语言开始时附加指令,这里从略。
(完整版)单片机指令大全
一个单片机所需执行指令的集合即为单片机的指令系统。
单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。
现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。
但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。
所谓机器语言即指令的二进制编码,而汇编语言则是指令的表示符号。
在指令的表达式上也不会直接使用二进制机器码,最常用的是十六进制的形式。
但单片机并不能直接执行汇编语言和高级语言,都必须通过汇编器“翻译”成为二进制机器码方能执行,但如果直接使用二进制来编写程序,那将十分不便,也很难记忆和识别,不易编写、难于辨读,极易出错,同时出错了也相当难查找。
所以现在基本上都不会直接使用机器语言来编写单片机的程序。
最好的办法就是使用易于阅读和辨认的指令符号来代替机器码,我们常称这些符号为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英文单词和拼音字母来表示。
每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。
MCS-51共有111条指令,可分为5类:[1].数据传送类指令(共29条)[2].算数运算类指令(共24条)[3].逻辑运算及移位类指令(共24条)[4].控制转移类指令(共17条)[5].布尔变量操作类指令(共17条)一些特殊符号的意义在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写都是相当有用的。
Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。
Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)direct—内部数据存储单元的8位地址。
PIC汇编语言指令
PIC 8位单片机共有三个级别,有相对应的指令集。
基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。
其指令向下兼容。
一、PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作码助记符操作数1,操作数2;注释指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。
1标号与MCS-51系列单片机功能相同,标号代表指令的符号地址。
在程序汇编时,已赋以指令存储器地址的具体数值。
汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。
标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。
在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。
指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。
书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。
再有标号不能用操作码助记符和寄存器的代号表示。
标号也可以单独占一行。
2操作码助记符该字段是指令的必选项。
该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。
3操作数由操作数的数据值或以符号表示的数据或地址值组成。
若操作数有两个,则两个操作数之间用逗号(,)分开。
当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。
还可以是被定义过的标号、字符串和ASCⅡ码等。
具体表示时,规定在二进制数前冠以字母“B”,例如B;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。
单片机汇编语言指令集
单片机汇编语言指令集汇编语言是一种低级程序设计语言,广泛应用于单片机的编程和控制。
单片机汇编语言指令集是程序员在开发单片机应用时必须了解和掌握的一项基础知识。
本文将介绍常用的单片机汇编语言指令集及其功能。
1. 指令集概述单片机汇编语言指令集是单片机内部指令的集合,用于完成各种操作和控制功能。
指令集由操作码和操作数组成,操作码表示指令的类型,操作数表示指令要操作的数据或地址。
2. 数据传送指令数据传送指令用于将数据从一个位置传送到另一个位置,包括寄存器之间的传送、寄存器和内存之间的传送等。
常用的数据传送指令有MOV、LDR、STR等。
3. 算术运算指令算术运算指令用于进行各种算术运算,包括加法、减法、乘法、除法等。
常用的算术运算指令有ADD、SUB、MUL、DIV等。
4. 逻辑运算指令逻辑运算指令用于进行各种逻辑运算,包括与、或、非、异或等。
常用的逻辑运算指令有AND、OR、NOT、XOR等。
5. 条件转移指令条件转移指令用于根据条件进行跳转或循环控制,常用的条件转移指令有BEQ、BNE、BGT、BLE等。
通过条件转移指令,程序可以根据不同的条件选择执行不同的代码路径。
6. 程序控制指令程序控制指令用于实现程序的跳转、函数的调用和返回等功能。
常用的程序控制指令有JMP、CALL、RET等。
通过程序控制指令,程序可以按照预定的流程执行,实现复杂的控制逻辑。
7. 输入输出指令输入输出指令用于与外部设备进行数据交互,包括输入数据和输出数据。
常用的输入输出指令有IN、OUT等。
通过输入输出指令,单片机可以与外围设备进行数据的传输和交互。
8. 中断指令中断指令用于处理外部中断或内部中断事件,包括中断的触发、中断的响应和中断的处理等。
常用的中断指令有INT、IRET等。
通过中断指令,单片机可以及时响应和处理各种中断事件。
9. 扩展指令扩展指令是一些额外的指令,用于扩展单片机的功能和性能。
扩展指令的具体内容和功能因不同的单片机而异,常见的扩展指令有乘法指令、移位指令、位操作指令等。
51单片机汇编程序
51单片机汇编程序1. 简介51单片机是一种常用的8位单片机芯片,具有广泛的应用领域。
51单片机的编程语言主要有汇编语言、C语言和底层汇编语言。
本文主要介绍51单片机的汇编程序。
2. 汇编程序基础2.1 寄存器51单片机的CPU有4个8位寄存器(A、B、DPTR、PSW)和一个16位寄存器(PC)。
在汇编程序中,我们可以使用这些寄存器来进行各种操作。
•A寄存器(累加器):用于存储数据和进行算术运算。
•B寄存器:辅助寄存器,可用于存储数据和进行算术运算。
•DPTR寄存器:数据指针寄存器,用于存储数据存取的地址。
•PSW寄存器:程序状态字寄存器,用于存储程序运行状态信息。
•PC寄存器:程序计数器,用于存储当前执行指令的地址。
2.2 指令集51单片机的指令集包含了多种汇编指令,可以用来进行数据操作、算术运算、逻辑运算、控制流程等。
常用的汇编指令有:•MOV:数据传送指令。
•ADD、SUB:加法和减法运算指令。
•ANL、ORL、XRL:逻辑运算指令。
•MOVX:外部RAM的读写指令。
•CJNE、DJNZ:条件分支指令。
•LCALL、RET:函数调用和返回指令。
2.3 编写一个简单的汇编程序下面是一个简单的汇编程序示例,用于将A寄存器中的数据加1,并将结果存储到B寄存器中。
ORG 0x0000 ; 程序的起始地址MOV A, #0x01 ; 将A寄存器赋值为1ADD A, #0x01 ; 将A寄存器加1MOV B, A ; 将A寄存器的值传送到B寄存器END ; 程序结束在上面的示例中,ORG指令用于指定程序的起始地址,MOV 指令用于将A寄存器赋值为1,ADD指令用于将A寄存器加1,MOV指令用于将A寄存器的值传送到B寄存器,END指令用于标记程序结束。
3. 汇编语言的应用51单片机的汇编语言广泛应用于各种嵌入式系统中,包括智能家居、工业自动化、仪器仪表等领域。
汇编程序具有以下特点:•程序执行效率高:由于汇编语言直接操作硬件,可以精确控制程序的执行流程,提高程序的执行效率。
汇编语言各种指令的解释与用法
【算术指令】
一、加法指令 12、加法指令 ADD (addition) 指令的汇编格式�add dst,src 指令的基本功能�(dst)<-(src)+(dst) 指令支持的寻址方式�他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况 外�源操作数和目地操作数必须有一个寄存器寻址方式。 指令对标志位的影响�SF=1 加法结果为负数�符号位为 1� SF=0 加法结果为正数�符号位为 0� ZF=1 加法结果为零 ZF=0 加法结果不为零 CF=1 最高有效位向高位有进位 CF=0 最高有效位向高位无进位 OF=1 两个同符号数相加�正数+正数或负数+负数��结果符号与其相反。 OF=0 两个不同符号数相加�或同符号数相加�结果符号与其相同。 13、带进为加法指令 ADC (add with carry) 指令的汇编格式�ADD dst,src 指令的基本功能�(dst)<-(src)+(dst)+CF 指令支持的寻址方式�他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况 外�源操作数和目地操作数必须有一个寄存器寻址方式。 指令对标志位的影响�SF=1 加法结果为负数 SF=0 加法结果为正数 ZF=1 加法结果为零 ZF=0 加法结果不为零 CF=1 最高有效位向高位有进位 CF=0 最低有效位相高位无进位 OF=1 两个同符号数相加�结果符号与其相反� OF=0 两个同符号数相加�或同符号相加�结果符号与其相同 14、加 1 指令 INC (increament) 指令的汇编格式�INC opr 指令的基本功能�(opr)<-(opr) 指令支持的寻址方式 可以使用除立即数方式外的任何寻址方式 指令对标志位的影响�SF=1 加法结果为负数 SF=0 加法结果为正数 ZF=1 加法结果为零 ZF=0 加法结果不为零 OF=1 两个同符号数相加�结果符号与其相反� OF=0 两个同符号数相加�或同符号相加�结果符号与其相同。 二、减法指令 15、减法指令 SUB (subtract) 指令的汇编格式�SUB dst,src 指令的基本功能�(dst)<-(dst)-(src) 指令支持的寻址方式�他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况
单片机常用指令
单片机常用指令单片机是一种集成在一个芯片上的微型计算机,广泛应用于各种电子设备中。
要让单片机按照我们的意愿工作,就需要给它下达各种指令。
下面就来介绍一些单片机常用的指令。
一、数据传送指令这一类指令用于在单片机内部的寄存器、存储器之间进行数据的传输。
比如“MOV”指令,它可以将一个数据从源操作数传送到目的操作数。
例如“MOV A, 50H”,就是把十六进制数 50H 传送到累加器 A 中。
“MOVX”指令则用于在单片机与外部数据存储器之间进行数据传送。
比如“MOVX A, @DPTR”,可以从外部数据存储器中读取数据到累加器 A 。
二、算术运算指令用于执行加、减、乘、除等算术运算。
“ADD”指令用于加法运算,“SUBB”指令用于带借位的减法运算。
例如“ADD A, R0”,将累加器 A 的值和寄存器 R0 的值相加,结果存放在累加器 A 中。
“MUL”指令用于乘法运算,它将累加器 A 和寄存器 B 中的两个 8 位无符号数相乘,结果的低 8 位存放在累加器 A 中,高 8 位存放在寄存器 B 中。
三、逻辑运算指令进行与、或、异或等逻辑操作。
“ANL”指令执行逻辑与操作,“ORL”指令执行逻辑或操作,“XRL”指令执行逻辑异或操作。
例如“ANL A, 0FH”,将累加器 A 的值和十六进制数 0FH 进行逻辑与运算,结果存放在累加器 A 中。
四、控制转移指令这类指令用于改变程序的执行流程。
“JMP”指令用于无条件跳转,直接跳转到指定的地址去执行程序。
例如“JMP 1000H”,程序将跳转到地址为 1000H 的地方继续执行。
“CJNE”指令用于比较两个操作数,如果不相等则跳转。
比如“CJNE A, 50H, LOOP”,如果累加器 A 的值不等于 50H ,就跳转到标号 LOOP 处执行。
“LCALL”和“ACALL”指令用于调用子程序。
“LCALL”可以调用64KB 范围内的子程序,而“ACALL”只能调用 2KB 范围内的子程序。
PIC8位单片机汇编语言常用指令的识读(下)
PIC8位单片机汇编语言常用指令的识读(下)本文关于指令的注释将与前述指令中的略有不同。
前述指令注释时是对指令具体完成的功能给以说明,这种注释方法对初学者确实易于接受和理解,但是实际应用中的PIC产品汇编语言的注释通常是以程序要做什么(或指令的作用)而不是说指令的直接功能。
鉴于上述原因,下述的指令注释将改变过去的注释方法,用程序应起的作用作注释。
10 寄程器半字节交换指令指令格式:SW APF f,d说明:SW APF是Swap f的合写。
符号f、d的意义与前述的相同。
该条指令的功能是寄存器f的高4位与低4位交换,即指令执行前,若寄存器f的8位状态为D7、D6、D5、D4、D3、D2、D1、D0,执行后的8位状态变为D3、D2、D1、D0、D7、D6、D5、D4,其结果存入W(d=0)或f(d=1)中。
实例:中断现场保护是中断技术中重要部分。
由于PIC16C××指令系统中没有进栈PUSH 和出栈POP指令,所以只能用其它指令来实现。
因为在主程序中常常用到工作寄存器W和状态寄存器STATUS,所以中断现场保护常要保护寄存器W和STATUS。
下面是对PIC16C7×系列芯片中断现场保护的实例程序。
MOVWF W_TEMP ;将W内容存入到临时寄存器W_TEMP中SWAPF STATUS,W;交换STA TUS与W内容MOVWF STATUS_TEMP ;将STATUS的内容存入到临…时寄存器STATUS_TEMP中中断服务程序…SWAPF STATUS_TEMP,W;交换STA TUS_TEMP与W的内容MOVWF STATUS;STATUS复原成原来的状态SWAPF W_TEMP,F;交换内容SWAPF W_TEMP,W;W复原成原来的状态说明:上述程序中各条指令的注释基本上都是以程序应达到的目的而注释的,对每条指令的功能几乎未涉及。
这是初学者应特别注意的。
11 子程序调用指令(Subroutine Call)指令格式:CALL k;k为立即地址说明:子程序调用,不同型号芯片的实现方法不尽相同,其共同点是首先将返回地址((PC)+1)压栈保护,再转入所调用的子程序入口地址执行(与MCS-51指令功能相似)。
汇编语言常用指令大全解释
汇编语言常用指令大全解释汇编语言常用指令大全解释常用汇编指令:MOV指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC // Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息PUSH入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作.PUSH SRC //Word入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器.入栈时高位字节先入栈,低位字节后入栈.POP DST //Word出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器.执行POP SS指令后,堆栈区在存储区的位置要改变.执行POP SP 指令后,栈顶的位置要改变.XCHG(eXCHanG)交换指令: 将两操作数值交换.XCHG OPR1, OPR2 //Byte/Word执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据.XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码.XLAT (OPR 可选) //Byte执行操作: AL=(BX+AL)指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.LEA(Load Effective Address) 有效地址传送寄存器指令LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中.执行操作: REG = EAsrc注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONEMOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中LDS(Load DS with pointer)指针送寄存器和DS指令LDS REG , SRC //常指定SI寄存器。
汇编指令大全
汇编指令大全汇编指令是计算机程序设计中的重要组成部分,它是一种低级语言,直接操作计算机硬件,能够对计算机进行精细的控制。
在学习汇编语言时,掌握各种指令是非常重要的,因为它们是编写高效、精确的程序的基础。
本文将对常用的汇编指令进行介绍,帮助读者更好地理解和运用汇编语言。
1. 数据传送指令。
数据传送指令用于在寄存器和内存之间传送数据,常见的指令包括MOV、XCHG等。
MOV指令用于将数据从一个位置复制到另一个位置,XCHG指令用于交换两个位置的数据。
这些指令在编写程序时经常用到,能够实现数据的传递和交换。
2. 算术运算指令。
算术运算指令用于对数据进行加减乘除等数学运算,常见的指令包括ADD、SUB、MUL、DIV等。
ADD指令用于加法运算,SUB指令用于减法运算,MUL指令用于乘法运算,DIV指令用于除法运算。
这些指令能够对数据进行各种数学运算,是编写复杂程序时不可或缺的指令。
3. 逻辑运算指令。
逻辑运算指令用于对数据进行逻辑运算,常见的指令包括AND、OR、NOT、XOR等。
AND指令用于按位与运算,OR指令用于按位或运算,NOT指令用于按位取反,XOR指令用于按位异或运算。
这些指令能够对数据进行逻辑运算,常用于程序中的逻辑判断和条件运算。
4. 跳转指令。
跳转指令用于改变程序的执行顺序,常见的指令包括JMP、JE、JNE、JG等。
JMP指令用于无条件跳转,JE指令用于相等时跳转,JNE指令用于不相等时跳转,JG指令用于大于时跳转。
这些指令能够实现程序的条件分支和循环控制,是编写复杂逻辑的关键指令。
5. 存储器访问指令。
存储器访问指令用于对存储器进行读写操作,常见的指令包括PUSH、POP、LEA等。
PUSH指令用于将数据压入堆栈,POP指令用于将数据弹出堆栈,LEA 指令用于加载有效地址。
这些指令能够对存储器进行高效的读写操作,是程序设计中不可或缺的指令。
6. 输入输出指令。
输入输出指令用于与外部设备进行数据交换,常见的指令包括IN、OUT等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PIC单片机指令集简介PIC 8位单片机共有三个级别,有相对应的指令集。
基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。
其指令向下兼容。
一、PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作码助记符操作数1,操作数2;注释指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。
1与MCS-51系列单片机功能相同,标号代表指令的符号地址。
在程序汇编时,已赋以指令存储器地址的具体数值。
汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。
标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。
在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。
指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。
书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。
再有标号不能用操作码助记符和寄存器的代号表示。
标号也可以单独占一行。
2该字段是指令的必选项。
该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。
3由操作数的数据值或以符号表示的数据或地址值组成。
若操作数有两个,则两个操作数之间用逗号(,)分开。
当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。
还可以是被定义过的标号、字符串和ASCⅡ码等。
具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。
在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。
指令的操作数项也是可选项。
PIC系列与MCS-51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。
因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单。
其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。
所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。
有关的寻址实例,均可在本文的后面找到。
4用来对程序作些说明,便于人们阅读程序。
注释开始之前用分号(;)与其它部分相隔。
当汇编程序检测到分号时,其后面的字符不再处理。
值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。
二、清零指令(共4条)1实例:CLRW;寄存器W被清零说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。
2实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)说明:WDT是英语Watchdog Timer的缩写字母。
CLR见上述说明。
注意该两条指令无操作数。
3f清零指令。
指令格式:CLRF f实例:CLRF TMRO;对TMRO清零说明:在PIC系列8位单片机中,常用符号F(或f)代表片内的各种寄程器和F的序号地址。
F取值按PIC系列不同型号而不同,一般为Ox00~Ox1F/7F/FF。
TMRO代表定时器/计数器TMRO,所以CLRF对寄程器清零,采用了直接寻址方式直接给出要访问的寄存器TMRO。
4 BCF f,b实例:BCF REG1,2;把寄存器REG1的D2位清零说明:BCF是英语Bit Clear F的缩写。
指令格式中的F,同上说明;符号b是表示PIC 片内某个8位数据寄存器F的位号(或位地址),所以b的取值为0~7或D0~D7。
实例中REG 是Register的缩写。
实例中的2代表指令格式中的b=2即寄存器REG1的D2位。
通过上述四条清零指令格式和实例,可以说明,学习PIC系列8位单片机的指令时应首先了解指令的助记符意义(功能),再有就是它的表达方式。
初学者没有必要死记指令,重要是理解和实践。
三、面向字节、常数与控制操作的指令1W指令指令格式:MOVLW k;k表示常数、立即数和标号说明:MOVLW是Move Literal to w的缩写实例:MOVL 0x1E;常数30送W2I/O口控制寄存器TRIS设置指令指令格式;TRIS f说明;TRIS f是Load TRIS Register的缩写。
其功能是把工作寄存器W的内容送入I/O 口控制寄存器f。
当W=0时,置对应I/O口为输出;W=1,置I/O口为输入。
实例:MOVLW 0x00 ;把00H送入WTRIS RA ;置PIC RA口为输出MOVLW 0xFF ;把FFH送入WTRIS RB ;置PIC RB口为输入说明:这是PIC汇编语言中常用的几条指令,即设置某个I/O口(这里是RA口和RB口)为输入或输出的语句。
可见,识读指令时,一应充分理解语句格式的功能,二应前后联系阅读。
3W寄存器内容送寄存器f(W内容保持不变)指令指令格式:MOVWF f说明:MOVWF是Move W to f的缩写实例:MOVLW 0x0B;送0BH送WMOVWF 6 ;送W内容到RB口说明:第一条指令0x0B(常数11)送工作寄存器W,第二条指令,把W内容常数11送到寄存器F6中,查表F6即为RB口,所以PORT_B(B口)=0BH=D114f传送指令指令格式:MOVF f,d说明:MOVF是Move f的缩写。
F代表PIC中的某个寄存器。
指令中的d规定:d=0时,f 内容送W;d=1时,f内容送寄存器。
实例:MOVF 6,0 ;RB口内容送WMOVWF 8 ;RB口内容送f8说明:第一条指令中的6代表寄存器f=6,查寄存器表f=6为RB口;0代表d=0,代表选择的目标为寄存器W。
第二条指令中的8代表寄存器f=8。
所以两条指令结果是把RB口的内容送f8。
至于f8内容是多少?还应在汇编语言开始时附加指令,这里从略。
5指令格式:NOP说明:NOP是英语No Operation的缩写。
NOP无操作数,所以称为空操作。
执行NOP 指令只使程序计数器PC加1,所以占用一个机器周期。
实例:MOVLW 0xOF ;送OFH到WMOVWF PORT_B ;W内容写入B口NOP ;空操作MOVF PORT_B,W ;读操作说明:该三条指令是一种对I/O口的B口连续操作的实例,其目的达到写入B口的内容要读出时,应保证写、读之间有个稳定时间,因此加入了空操作指令NOP。
6指令格式:GOTO k说明:执行该条指令时,将指令转移到指定的地址(跳转)。
指令中的k,常与程序中的标号联系起来。
实例:见第9条指令中71,结果为零的间跳指令指令格式:DECFSZ f,d说明:DECFSZ是英语Decrement f,Skip of not 0的缩写。
符号f,d代表的意义,前述已作说明。
该条指令是指寄存器的内容减1存入W(d=0)或f(d=1)中。
若指令执行结果减1不为零,指令顺序执行;为零时,就间跳下一条指令后再执行(等效顺序执行一条空指令NOP),实际指令中,当d=1时,该项常被略去。
81,结果为零间跳指令指令格式:INCFSZ f,d说明:INCFSZ是英语Increment f,Skip of 0的缩写。
该条指令与上一条(7)指令差别仅在于“1”上,即执行这条指令时,寄存器f内容加1,若结果不为零,则指令顺序执行;为零则指令间跳执行。
执行这条指令的其它逻辑关系与上条相同。
9指令格式:RETLW k说明:RETLW是Return Literal to W的缩写。
该指令代表子程序返回,返回前先把8位立即数送W。
实例:PIC某个汇编语言的延时子程序(摘要):(1)BELY MOVLW 0xC5 ;送延时常数0C5H入W(2) MOVWF COUNT2;0C5H送入计数器2(3) CLRF COUNT1;对计数器1清零(4)LOOP INCFSZ COUNT1;计数器1加1计数器1加1结果不为零,跳转循环(5) GOTO LOOP ;(6) DECTSZ CPUNT2 ;计数2减1计数器2减1结果不为零,跳转循环重复执行第4条指令(7) GOTO LOOP ;(8) RETLW 0 ;子程序执行结束返回说明:程序中的注释已分别对每条指令的功能作了说明,补充说明1(4)条加1指令结果为零时,就间跳转到执行第(6)条指令。
2(6)条减1指令结果为零时,就间跳转到第(8)条子程序返回,整个延时指令才算完成。
3数器1或2代表PIC中某个寄存器,该寄存器由程序开始的伪指令赋值决定(关于伪指令今后将作专门介绍)。
本文关于指令的注释将与前述指令中的略有不同。
前述指令注释时是对指令具体完成的功能给以说明,这种注释方法对初学者确实易于接受和理解,但是实际应用中的PIC产品汇编语言的注释通常是以程序要做什么(或指令的作用)而不是说指令的直接功能。
鉴于上述原因,下述的指令注释将改变过去的注释方法,用程序应起的作用作注释。
10指令格式:SWAPF f,d说明:SWAPF是Swap f的合写。
符号f、d的意义与前述的相同。
该条指令的功能是寄存器f的高4位与低4位交换,即指令执行前,若寄存器f的8位状态为D7、D6、D5、D4、D3、D2、D1、D0,执行后的8位状态变为D3、D2、D1、D0、D7、D6、D5、D4,其结果存入W(d=0)或f(d=1)中。
实例:中断现场保护是中断技术中重要部分。
由于PIC16C××指令系统中没有进栈PUSH和出栈POP指令,所以只能用其它指令来实现。
因为在主程序中常常用到工作寄存器W 和状态寄存器STATUS,所以中断现场保护常要保护寄存器W和STATUS。
下面是对PIC16C7×系列芯片中断现场保护的实例程序。
MOVWF W_TEMP ;将W内容存入到临时寄存器W_TEMP中SWAPF STATUS,W ;交换STATUS与W内容MOVWF STATUS_TEMP ;将STATUS的内容存入到临…时寄存器STATUS_TEMP中中断服务程序…SWAPF STATUS_TEMP,W;交换STATUS_TEMP与W的内容MOVWF STATUS ;STATUS复原成原来的状态SWAPF W_TEMP,F ;交换内容SWAPF W_TEMP,W ;W复原成原来的状态说明:上述程序中各条指令的注释基本上都是以程序应达到的目的而注释的,对每条指令的功能几乎未涉及。