8051指令集和汇编语言编程
MOV(Move):传送内部数据寄存器RAM和特殊功能寄存器SFR的数据; (没有MOV Rn、Rn等寻址方式)
MOVC(Move Code)读取程序存储器数据表的数据传输; (只有两项:MOVC A,@A+DPTR 和MOVC A,@A+PC)
MOVX(MoveExternalRAM)数据传输到外部RAM;
XCH(Exchange)字节交换;
XCHD(Exchange low-order Digit)低半字节交换;
PUSH (Push into Stack) 压入堆栈;
POP(Pop from Stack)从堆栈中弹出;
2. 算术运算
ADD(加法)加法;
ADDC(Add with Carry)带进位加法;
SUBB(Subtract with Borrow)带借位减法;
DA(Decimal Adjust)添加BCD压缩码后进行小数调整;
INC(Increment)自增; (有INC DPTR指令)
DEC(Decrement)递减; (没有DEC DPTR指令)
MUL(Multiplication,乘法)乘法; (乘积的高8位放在B中,低8位放在A中)
DIV(Division,除法)除法; (商放在A中,余数放在B中)
3.逻辑运算类
ANL(AND 逻辑) 按位与
ORL(或逻辑)按位或;
XRL(Exclusive-OR Logic) 按位异或;
CLR(清除) 清除;
CPL(补语)否定;
以下5条指令的操作数只能是A。
RL A(Rotate left) 向左旋转;
RLC A(Rotate Left through the Carry flag)带进位左移;
RR A(Rotate Right) 向右旋转;
RRC A(Rotate Right through the Carry flag)带进位右移;
SWAP A(交换)将低4位与高4位交换;
4. 控制传输类
ACALL(Absolute subroutine Call)子程序绝对调用;
LCALL(Long subroutine Call)子程序长调用;
RET(Return from subroutine)子程序返回;
RETI(Return from Interruption)中断服务子程序返回;
SJMP(Short Jump)短转;
AJMP(Absolute Jump)绝对转移;
LJMP(跳远)长距离转移;
CJNE(Compare Jump if Not Equal)如果比较不相等则转移;
DJNZ(Decrement Jump if Not Zero)减1后不为0则转移;
(为什么INTEL不让字节指令和位指令保持一致呢?)
JZ (Jump if Zero) 如果A的结果为0,则转移;
JNZ (Jump if Not Zero) 如果结果不为0则转移;
JC(进位标志置位则跳转) 如果C 为1,则转移;
JNC(如果不进位则跳转)如果C为0则转移;
如果JB(Jump if the Bit is set)位为1,则传输;
如果JNB(如果位未设置则跳转)位为0,则跳转;
JBC(Jump if the Bit is set and Clear the bit)如果该位为1则跳转并清除该位;
NOP(无操作)无操作;
5. 位操作指令
CLR(清零)位清零;
SETB(设置位)设置为1
汇编语言由指令和伪指令组成。下面给出常用的伪指令
8条常用伪指令
1. ORG 16位地址;
该指令用在原程序或数据块的开头,表示该语句后目标程序或数据块存放的起始地址。
2、【标签:】DB字节数据项表;
将条目表中的字节数据存储到从标签开始的连续字节单元中。例如:SEG:DB 88H、100、“7”、“C”
3、【标签:】DW双字节数据项表;
定义一个16位地址表。 16位地址将低位字节存储在低位地址中,将高位字节存储在高位地址中。
例如:TAB:DW 1234H、7BH
4.名称EQU表达式或名称=表达式;
使用AND 为表达式赋值或命名字符串。然后该名称可以用作程序地址、数据地址或立即地址。该名称必须是以一个字母开头的字母数字字符串。
例如:COUNT=10 或SPACE EQU 10H。名称DATA 直接字节地址;
为8 位内部RAM 单元命名。该名称必须是以一个字母开头的字母数字字符串。同一单位可以有多个名称。
例如:错误数据80H
6.名称XDATA直接字节地址;
为8 位外部RAM 命名。名称规范与DATA 伪指令相同。
例如:IO_PORT XDATA 0CF04H
7、命名BIT位命令;
为可位寻址的位单元命名。规格与DATA指令相同。
例如:SWT 位30H
用户评论
入骨相思
哇,8051指令集和汇编语言编程,这可是老古董了,现在还能找到愿意学习的人吗?感觉好厉害啊。
有10位网友表示赞同!
苏莫晨
8051指令集,简直就是嵌入式开发的基石,汇编语言编程更是考验人的耐心和细心,我学习了半年才有点感觉。
有8位网友表示赞同!
﹏櫻之舞﹏
刚入门嵌入式开发,看到这个标题感觉有点迷茫,8051指令集和汇编语言编程真的那么难吗?
有18位网友表示赞同!
烟雨离殇
8051指令集和汇编语言编程,对于我们这些老程序员来说,那是青春的记忆啊!现在的小年轻可能都不太了解了吧。
有14位网友表示赞同!
恰十年
学习了汇编语言编程,感觉对计算机底层有了更深的理解,8051指令集的应用也很广泛,对以后的学习帮助很大。
有10位网友表示赞同!
生命一旅程
8051指令集和汇编语言编程,虽然有点过时,但基础知识和编程思维还是很有价值的,建议初学者可以学一下。
有12位网友表示赞同!
嗯咯
汇编语言编程太繁琐了,每次写代码都感觉头大,比起C语言和C++来说,真的没有优势啊。
有10位网友表示赞同!
揉乱头发
8051指令集和汇编语言编程,虽然门槛高,但一旦掌握,对于嵌入式开发来说,简直是得心应手。
有15位网友表示赞同!
泪湿青衫
感觉8051指令集和汇编语言编程对硬件的理解要求很高,如果不是特别需要,现在学这个有点浪费时间。
有13位网友表示赞同!
ˉ夨落旳尐孩。
汇编语言编程真的很考验人的逻辑思维,我花了很长时间才适应这种编程方式,但确实学到了很多东西。
有20位网友表示赞同!
ok绷遮不住我颓废的伤あ
8051指令集和汇编语言编程,虽然老,但经典永不过时,对那些对嵌入式开发有兴趣的人来说,还是值得一学的。
有12位网友表示赞同!
泡泡龙
我更喜欢C语言和C++,感觉汇编语言编程太麻烦了,8051指令集也太难记了,现在学习的人越来越少吧。
有13位网友表示赞同!
孤自凉丶
8051指令集和汇编语言编程,对于我们这些有志于深入研究硬件的程序员来说,是不可或缺的基础。
有6位网友表示赞同!
不相忘
学习了汇编语言编程,感觉自己的编程能力提升了不少,8051指令集的应用也让我对嵌入式系统有了更深的认识。
有12位网友表示赞同!
肆忌
8051指令集和汇编语言编程,虽然有点古老,但作为入门级的学习内容,我觉得还是很有价值的。
有16位网友表示赞同!
不识爱人心
汇编语言编程,尤其是8051指令集,真的需要耐心和毅力,但学成之后,那种成就感是无法言表的。
有9位网友表示赞同!
孤独症
现在嵌入式开发的主流是C语言和C++,感觉8051指令集和汇编语言编程快要被淘汰了,有点遗憾。
有13位网友表示赞同!
关于道别
8051指令集和汇编语言编程,虽然有点难度,但作为计算机科学的基础,我觉得每个程序员都应该了解一下。
有11位网友表示赞同!
早不爱了
学习了汇编语言编程,对计算机硬件有了更深的理解,8051指令集的应用也让我对嵌入式系统有了全新的认识。
有10位网友表示赞同!