汇编语言指令与c51单片机指令的异同处Word格式.docx
- 文档编号:22656628
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:23
- 大小:38.86KB
汇编语言指令与c51单片机指令的异同处Word格式.docx
《汇编语言指令与c51单片机指令的异同处Word格式.docx》由会员分享,可在线阅读,更多相关《汇编语言指令与c51单片机指令的异同处Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
(4)能够根据特定的应用对代码做最佳的优化,提高运行速度;
(5)能够最大限度地发挥硬件的功能。
缺点
同时还应该认识到,汇编语言是一种层次非常低的语言,它仅仅高于直接手工编写二进制的机器指令码,因此不可避免地存在一些缺点:
(1)编写的代码非常难懂,不好维护;
(2)很容易产生bug,难于调试;
(3)只能针对特定的体系结构和处理器进行优化;
(4)开发效率很低,时间长且单调。
语言优缺点:
4.汇编语言指令:
一、数据传输指令
1.通用数据传送指令.
MOV(MOVe)传送字或字节.
MOVS(MOVeString)串传送指令
MOVSX先符号扩展,再传送.
MOVZX先零扩展,再传送.
PUSH把字压入堆栈.
POP把字弹出堆栈.
PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.
POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
BSWAP交换32位寄存器里字节的顺序
XCHG(eXCHanG)交换字或字节.(至少有一个操作数为寄存器,段寄存器不可作为操作数)
CMPXCHG比较并交换操作数.(第二个操作数必须为累加器AL/AX/EAX)
XADD先交换再累加.(结果在第一个操作数里)
XLAT(TRANSLATE)字节查表转换.
──BX指向一张256字节的表的起点,AL为表的索引值(0-255,即0-FFH);
返回AL为查表结果.([BX+AL]->
AL)
2.输入输出端口传送指令.
INI/O端口输入.(语法:
IN累加器,{端口号│DX})
OUTI/O端口输出.(语法:
OUT{端口号│DX},累加器)
输入输出端口由立即方式指定时,其范围是0-255;
由寄存器DX指定时,其范围是0-65535.
3.目的地址传送指令.
LEA(LoadEffectiveAddress)装入有效地址.
例:
LEADX,string;
把偏移地址存到DX.
LDS(LoadDSwithpointer)传送目标指针,把指针内容装入DS.
LDSSI,string;
把段地址:
偏移地址存到DS:
SI.
LES(LoadESwithpointer)传送目标指针,把指针内容装入ES.
LESDI,string;
偏移地址存到ES:
DI.
LFS传送目标指针,把指针内容装入FS.
LFSDI,string;
偏移地址存到FS:
LGS传送目标指针,把指针内容装入GS.
LGSDI,string;
偏移地址存到GS:
LSS传送目标指针,把指针内容装入SS.
LSSDI,string;
偏移地址存到SS:
4.标志传送指令.
LAHF(LoadAHwithFlags)标志寄存器传送,把标志装入AH.
SAHF(StoreAHintoFlgs)标志寄存器传送,把AH内容装入标志寄存器.
PUSHF(PUSHtheFlags)标志入栈.
POPF(POPtheFlags)标志出栈.
PUSHD32位标志入栈.
POPD32位标志出栈.
二、算术运算指令
ADD加法.
ADC带进位加法.
INC加1.
AAA加法的ASCII码调整.非压缩的BCD码加法十进制调整指令
DAA加法的十进制调整.压缩的BCD码加法十进制调整指令
SUB(SUBtract)减法.
SBB(SuVtrachwithborrow)带借位减法.
DEC(DECrement)减1.
NEC(NEGate)求反(以0减之).
CMP(CoMPare)比较.(两操作数作减法,仅修改标志位,不回送结果).
AAS减法的ASCII码调整.非压缩的BCD码加法十进制调整指令
DAS减法的十进制调整.压缩的BCD码减法十进制调整指令
MUL(unsingedMULtiple)无符号乘法.
IMUL(sIgnedMULtiple)整数乘法.
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
AAM乘法的ASCII码调整.
DIV(unsignedDIVide)无符号除法.
IDIV(sIgnedDIVide)整数除法.
以上两条,结果回送:
商回送AL,余数回送AH,(字节运算);
或商回送AX,余数回送DX,(字运算).
AAD除法的ASCII码调整.
CBW(CountBytetoWord)字节转换为字.(把AL中字节的符号扩展到AH中去)
CWD(CountWordtoDobleword)字转换为双字.(把AX中的字的符号扩展到DX中去)
CWDE字转换为双字.(把AX中的字符号扩展到EAX中去)
CDQ双字扩展.(把EAX中的字的符号扩展到EDX中去)
三、逻辑运算指令
AND与运算.
or或运算.
XOR异或运算.
NOT取反.
TEST测试.(两操作数作与运算,仅修改标志位,不回送结果).
SHL(SHiftlogicalLetf)逻辑左移.
SAL算术左移.(=SHL)
SHR(SHiftlogicalRight)逻辑右移.
SAR算术右移.(=SHR)
ROL(RotateLeft)循环左移.
ROR(RotateRight)循环右移.
RCL(RotateLeftthroughCarry)通过进位的循环左移.
RCR(RotateRightthroughCarry)通过进位的循环右移.
以上八种移位指令,其移位次数可达255次.
移位一次时,可直接用操作码.如SHLAX,1.
移位>
1次时,则由寄存器CL给出移位次数.
如MOVCL,04
SHLAX,CL
四、串指令
DS:
SI源串段寄存器:
源串变址.
ES:
DI目标串段寄存器:
目标串变址.
CX重复次数计数器.
AL/AX扫描值.
D标志0表示重复操作中SI和DI应自动增量;
1表示应自动减量.
Z标志用来控制扫描或比较操作的结束.
MOVS串传送.
(MOVSB传送字符.MOVSW传送字.MOVSD传送双字.)
CMPS(CoMPareString)串比较.
(CMPSB比较字符.CMPSW比较字.)
SCAS(SCAnString)串扫描指令.
把AL或AX的内容与目标串作比较,比较结果反映在标志位.
LODS装入串.
把源串中的元素(字或字节)逐一装入AL或AX中.
(LODSB传送字符.LODSW传送字.LODSD传送双字.)
STOS(STOreintoString)保存串.
是LODS的逆过程.
REP(REPeat)当CX/ECX<
>
0时重复.
REPE/REPZ(REPeatwhileEqual/Zero)当ZF=1或比较结果相等,且CX/ECX<
REPNE/REPNZ(REPeatwhileNotEqual/Zero)当ZF=0或比较结果不相等,CX/ECX<
REPC当CF=1且CX/ECX<
REPNC当CF=0且CX/ECX<
五、程序转移指令
1>
无条件转移指令(长转移)
JMP无条件转移指令
CALL过程调用
RET/RETF过程返回.
2>
条件转移指令(短转移,-128到+127的距离内)
(当且仅当(SFXOROF)=1时,OP1<
OP2)
JA/JNBE不小于或不等于时转移.
JAE/JNB大于或等于转移.
JB/JNAE小于转移.
JBE/JNA小于或等于转移.
以上四条,测试无符号整数运算的结果(标志C和Z).
JG/JNLE大于转移.
JGE/JNL大于或等于转移.
JL/JNGE小于转移.
JLE/JNG小于或等于转移.
以上四条,测试带符号整数运算的结果(标志S,O和Z).
JE/JZ等于转移.
JNE/JNZ不等于时转移.
JC有进位时转移.
JNC无进位时转移.
JNO不溢出时转移.
JNP/JPO奇偶性为奇数时转移.
JNS符号位为"
0"
时转移.
JO溢出转移.
JP/JPE奇偶性为偶数时转移.
JS符号位为"
1"
3>
循环控制指令(短转移)
LOOPCX不为零时循环.
LOOPE/LOOPZCX不为零且标志Z=1时循环.
LOOPNE/LOOPNZCX不为零且标志Z=0时循环.
JCXZCX为零时转移.
JECXZECX为零时转移.
4>
中断指令
INT中断指令
INTO溢出中断
IRET中断返回
5>
处理器控制指令
HLT处理器暂停,直到出现中断或复位信号才继续.
WAIT当芯片引线TEST为高电平时使CPU进入等待状态.
ESC转换到外处理器.
LOCK封锁总线.
NOP空操作.
STC置进位标志位.
CLC清进位标志位.
CMC进位标志取反.
STD(SeTDirectionflag)置方向标志位.
CLD(CLearDirectionflag)清方向标志位.
STI置中断允许位.
CLI清中断允许位.
六、伪指令
DW定义字(2字节).
PROC定义过程.
ENDP过程结束.
SEGMENT定义段.
ASSUME建立段寄存器寻址.
ENDS段结束.
END程序结束.
8088汇编跳转
cmpa,b比较a与b
mova,b把b的值送给a
ret返回主程序
nop无作用,英文“nooperation”的简写,意思是“donothing”
call调用子程序
je或jz若相等则跳
jne或jnz若不相等则跳
jmp无条件跳
jb若小于则跳
ja若大于则跳
jg若大于则跳
jge若大于等于则跳
jl若小于则跳
jle若小于等于则跳
pop出栈
push压栈
MOV
功能:
把源操作数送给目的操作数
语法:
MOV目的操作数,源操作数
格式:
MOVr1,r2
MOVr,m
MOVm,r
MOVr,data
XCHG
交换两个操作数的数据
XCHG
XCHGr1,r2XCHGm,rXCHGr,m
PUSH,POP
把操作数压入或取出堆栈
PUSH操作数POP操作数
PUSHrPUSHMPUSHdataPOPrPOPm
PUSHF,POPF,PUSHA,POPA
堆栈指令群
PUSHFPOPFPUSHAPOPA
LEA,LDS,LES
取地址至寄存器
LEAr,mLDSr,mLESr,m
XLAT(XLATB)
查表指令
XLATXLATm
算数运算指令
ADD,ADC
加法指令
ADDOP1,OP2ADCOP1,OP2
ADDr1,r2ADDr,mADDm,rADDr,data
影响标志:
C,P,A,Z,S,O
SUB,SBB
减法指令
SUBOP1,OP2SBBOP1,OP2
SUBr1,r2SUBr,mSUBm,rSUBr,dataSUBm,data
INC,DEC
把OP的值加一或减一
INCOPDECOP
INCr/mDECr/m
P,A,Z,S,O
NEG
将OP的符号反相(取二进制补码)
NEGOP
NEGr/m
MUL,IMUL
乘法指令
MULOPIMULOP
MULr/mIMULr/m
C,P,A,Z,S,O(仅IMUL会影响S标志)
DIV,IDIV
除法指令
DIVOPIDIVOP
DIVr/mIDIVr/m
CBW,CWD
有符号数扩展指令
CBWCWD
AAA,AAS,AAM,AAD
非压BCD码运算调整指令
AAAAASAAMAAD
A,C(AAA,AAS)S,Z,P(AAM,AAD)
DAA,DAS
压缩BCD码调整指令
DAADAS
C,P,A,Z,S
位运算指令集
AND,OR,XOR,NOT,TEST
执行BIT与BIT之间的逻辑运算
ANDr/m,r/m/dataORr/m,r/m/dataXORr/m,r/m/dataTESTr/m,r/m/dataNOTr/m
C,O,P,Z,S(其中C与O两个标志会被设为0)NOT指令不影响任何标志位
SHR,SHL,SAR,SAL
移位指令
SHRr/m,data/CLSHLr/m,data/CLSARr/m,data/CLSALr/m,data/CL
C,P,Z,S,O
ROR,ROL,RCR,RCL
循环移位指令
RORr/m,data/CLROLr/m,data/CLRCRr/m,data/CLRCLr/m,data/CL
程序流程控制指令集
CLC,STC,CMC
设定进位标志
CLCSTCCMC
标志位:
C
CLD,STD
设定方向标志
CLDSTD
D
CLI,STI
设定中断标志
CLISTI
I
CMP
比较OP1与OP2的值
CMPr/m,r/m/data
C,P,A,Z,O
JMP
跳往指定地址执行
JMP地址
JXX
当特定条件成立则跳往指定地址执行
JXX地址
注:
A:
ABOVE,当C=0,Z=0时成立
B:
BELOW,当C=1时成立
C:
CARRY,当弁时成立CXZ:
CX寄存器的值为0(ZERO)时成立
E:
EQUAL,当Z=1时成立
G:
GREATER(大于),当Z=0且S=0时成立
L:
LESS(小于),当S不为零时成立
N:
NOT(相反条件),需和其它符号配合使用
O:
OVERFLOW,O=1时成立
P:
PARITY,P=1时成立
PE:
PARITYEVEN,P=1时成立
PO:
PARITYODD,P=0时成立
S:
SIGN,S=1时成立
Z:
ZERO,Z=1时成立
LOOP
循环指令集
LOOP地址
LOOPE(Z)
地址LOOPNE(Z)地址
无
CALL,RET
子程序调用,返回指令
CALL地址RETRETn
INT,IRET
中断调用及返回指令
INTnIRET
在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器
字符串操作指令集
MOVSB,MOVSW,MOVSD
字符串传送指令
MOVSBMOVSWMOVSD
CMPSB,CMPSW,CMPSD
字符串比较指令
CMPSBCMPSWCMPSD
SCASB,SCASW
字符串搜索指令
SCASBSCASW
LODSB,LODSW,STOSB,STOSW
字符串载入或存贮指令
LODSBLODSWSTOSBSTOSW
REP,REPE,REPNE
重复前缀指令集
REP指令SREPE指令SREPNE指令S
依指令S而定
二、C51汇编语言
C语言是一种计算机程序设计语言。
它既具有高级语言的特点,又具有汇编语言的特点。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。
2.特点:
1.单片机C51语言兼备高级语言与低级语言的优点。
2.语法结构和标准C语言基本一致,语言简洁,便于学习。
3.运行于单片机平台,支持的微处理器种类繁多,可移植性好。
对于兼容的8051系列单片机,只要将一个硬件型号下的程序稍加修改,甚至不加改变,就可移植到另一个不同型号的单片机中运行。
4.具有高级语言的特点,尽量减少底层硬件寄存器的操作。
5.单片机C51语言提供了完备的数据类型、运算符及函数供使用。
6.C51语言是一种结构化程序设计语言,可以使用一对花括号“{}”将一系列语句组合成一个复合语句,程序结构清晰明了。
7.C51语言代码执行的效率方面十分接近汇编语言,且比汇编语言的程序易于理解,便于代码共享。
3.C语言优缺点
C语言的优点
1.简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。
它把高级语言的基本结构和语句与低级语言的实用性结合起来。
C语言可以象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2.运算符丰富
C的运算符包含的范围很广泛,共有种34个运算符。
C语言把括号、赋值、强制类型转换等都作为运算符处理。
从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
3.数据结构丰富
C的数据类型有:
整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。
能用来实现各种复杂的数据类型的运算。
并引入了指针概念,使程序效率更高。
另外C语言具有强大的图形功能,支持多种显示器和驱动器。
且计算功能、逻辑判断功能强大。
4.C是结构式语言
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
5.C语法限
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 指令 c51 单片机 异同