重温51汇编指令(附实验)

写在前面:

在电子控制的课上,老师带我们重温了一些51的汇编指令,有了一些新的思考,感觉非常的有趣,所以这里进行总结和尝试。

正文:

实验平台:

keil5
重温51汇编指令(附实验) - 图1

实验目标MCU:

intel的80C51BH
重温51汇编指令(附实验) - 图2

51寄存器的简单介绍:

通过debug窗口可以进行观察

重温51汇编指令(附实验) - 图3

符号以及寄存器意义:

1、r0~r7寄存器组的八个工作寄存器

2、a是累加器,用于运算以及存放数据

3、b是专用寄存器,用于MUL(乘法)、DIV(除法)存放第二操作数、乘积的高位字节、除法余数等。

4、psw属于程序状态字

重温51汇编指令(附实验) - 图4
4.1 p是奇偶标志位
p=1则累加器a中1的个数为奇数;p=0则累加器a中1的个数为偶数。
重温51汇编指令(附实验) - 图5
4.2 ov是溢出标志位,ov=0没有溢出;ov=1溢出
重温51汇编指令(附实验) - 图6
这里进行完ab的乘法运算很显然是溢出了,高8位放到了b中,低8位放在了a里。
4.3 rs是当前寄存器选择位,就是说选择不同的寄存器组。
4.4 f0用户标志位,用户可用软件自定义的一个标志位。
4.5 cy进位标志位,存放算术运算的进位标志,布尔运算中作累加位使用。
重温51汇编指令(附实验) - 图7
重温51汇编指令(附实验) - 图8
执行add指令之前,a是80H,r4是8aH,相加应该是10aH(都是16进制)。
重温51汇编指令(附实验) - 图9
执行完add指令之后,a变成了0aH,进位标志位cy变成了1。
ac辅助进位标志位,做BCD运算时,低四位向高四位进位或错位时,置1。

5、sp栈指针寄存器

默认sp的值位0x07,在执行堆栈操作、程序调用、子程序返回以及中断返回等指令时,sp的值自动+1或-1
重温51汇编指令(附实验) - 图10

6、dptr数据指针寄存器

7、pc程序计数器

程序执行到什么位置了
重温51汇编指令(附实验) - 图11
states没有查到专门解释,我觉的可能是指令执行的数目,因为没执行一条指令会+1,但有时候执行复杂一点的指令,会+3或者+4。
sec这个也没有查到,我感觉应该和时间有关。

汇编指令:

每一种MCU都有自己独特的汇编指令,有相似的地方,但也有很大的不同。所以汇编语言可移植性很不好,但胜在简单高效。

指令格式

[标号]:操作码 [目的操作数],[源操作数] ; [注释]

指令分类

  • 数据传送指令 29条
    • 把源地址中的操作数传送到目的地址(寄存器)中
  • 算术运算指令 24条
    • 加减乘除等,第一操作数放在累加器A中,第二操作数放在某个寄存器或者片内RAM中,运算结果会保存在A中,因为运算产的进位标志、奇偶标志和溢出标志等保存在PSW中。
  • 逻辑运算操作指令 24条
    • 逻辑操作与循环移位两类指令
    • 逻辑运算:逻辑乘、逻辑加、逻辑取反、异或等。
    • 也是先把一个操作数放在A中,执行结果也放在A中
  • 位操作指令 17条
  • 控制转移指令 17条

    寻址方式

  • 直接寻址

    • MOV A,36H把内部RAM 36H中的数据放在累加器A中
  • 立即寻址
    • MOV A,#20H操作数前加‘#’号就是立即数,不加就是直接地址
  • 寄存器寻址
    • MOV A,R0把当前R6中的内容送到累加器A中
  • 间接寻址

    • MOV R0,#40H
    • MOV A,@R0

      数据传送类指令

      MOV内部数据传送指令
      重温51汇编指令(附实验) - 图12
      MOVC程序存储器读指令
      重温51汇编指令(附实验) - 图13
      MOVX外部数据传送指令
      XCH整字节交换指令
      XCHD半字节交换指令

      算术运算类指令

      ADD不带进位的加法指令
      ADDC带进位的加法指令
      重温51汇编指令(附实验) - 图14
  • 一开始给累加器a=0ach,再向累加器a中加98h,1010 1100 +1001 1000=1 0100 0101

  • 会出现进位,所以这个时候进位标志位cy为1,辅助进位标志位ac为1,溢出标志位ov为1

INC加1指令
重温51汇编指令(附实验) - 图15
SUBB减法指令
DEC减一指令
重温51汇编指令(附实验) - 图16
DA十进制调整指令
重温51汇编指令(附实验) - 图17
68+89=157 结果a=57 进位标志位cy=1,这就是BCD加法程序
MUL乘法指令
注意乘积,高八位再b中,低八位在a中
重温51汇编指令(附实验) - 图18
DIV除法指令

逻辑运算指令

  • ANL与
  • ORL或
  • XRL异或
  • CLR清零

    移位指令

  • RL累加器左环移

  • RR累加器右环移
  • RLC累加器带进位左环移
  • RRC累加器带进位右环移

    控制转移类指令

  • LJMP长转移指令

  • AJMP绝对转移指令
  • SJMP短转移指令
  • JMP间接转移指令
  • JZ条件转移指令(a=0)
  • JNZ条件转移指令(a不等于0)
  • CJNE比较转移指令
  • DJNZ减一条件转移指令
  • LCALL调用指令(长)
  • ACALL绝对调用指令
  • RET返回指令(子程序)
  • RETI返回指令(中断服务程序)

    写在最后:

    最后,希望上海疫情早点过去,我不想我的学生生活天天呆在宿舍里。/(ㄒoㄒ)/~~ 祝大家早安、午安和晚安