立即注册 登录
返回首页

uid:89408的个人空间

日志

我的汇编语言学习笔记

已有 1126 次阅读2015-9-5 10:01 | 单片机

单片机学习笔记

一、        单片机的指令系统

1,指令长度可分为:单字节,双字节,三字节。

2,指令的格式:            标号:  操作码 操作数或操作数地址;注释

3,试列                              DELAY:      MOV                  R3,#0FFH          ;一段延时程序

二、        寻找操作数

注:以逗号后面寻找操作数的方式来确定是什么寻址方式

1,立即数寻址:立即找到操作数,例:MOV   A ,   #55H

         例:MOV        Rn,            #01H

         Rn:工作寄存器00H——1FH

         MOV         DPTR,       #1FFFH

         DPTR:特殊功能寄存器两个8DPH,DPL唯一一条16位传输指令

         MOV         70H(direct),     #88H

         Direct:一个通用单片内部RAM地址,且只能是8位地址,要具体写地址某个单元

         ADD          A,     #55H

         A的内容加上后面这个立即数,得到的值还要送去累加器A

         SUB           A,     #01

         A的内容减去后面这个立即数,得到的差值还要送给累加器A

         关键字符:“#”带这个字符说明就是一个数据。

2,直接寻址:已知一个操作数的地址单元,可根据这个地址找到这个操作数,直接给出单元的地址。

         例:MOV         A  20H

         20H这个地址单元里的操作数送到累加器A

         MOV         Rn,            30H

         Rn:工作寄存器

         MOV         @Ri,                   30H

 

         ADD          A,               30H

         SUB           A,               30H

        

3,寄存器寻址:以寻找已知寄存器地址的方式寻找。

         :MOV            P1,             A

         A寄存器里的值附到P1

         MOV         P1,             R4

         R4里面的内容送P1

         CLR           A

         清除寄存器A里的值

4,寄存器间接寻址:先找到一个寄存器里存放操作数的内部RAM地址再找到这个地址才能找到操作数。

         例:MOV         A,     @R0

         R0寄存器的内容作为地址,这个地址所确定的单元的内容送到累加器A

         MOVX       A,     @DPTR

         在外部寄存器DPTR里找到内容作为地址,以这个地址找到所对应的单元里的内容送再到累加器A

         注:间接寄存器寻址只能在R0R1DPTR,里寻址

5,变址寻址:将两个寄存器(ADPTRPC)相加所得到的值作为程序存储区的地址来找到程序存储区里的操作数

         例:MOVC      A,@A+DPTR

         将寄存器ADPTR两个值相加所得到的值作为单元地址再寻找程序存储区里的操作数

         MOVC      A,@A+PC

         将寄存器A里的内容与下一条将要执行的地址相加所得到的值作为单元地址在程序存储区寻找操作数

6,相对寻址:相对寻址不需要操作数,只是PC当前执行地址的一个转移值,将PC转移到指定的地方再执行程序

         例:SJMP         03H

         将当前PC所执行的地址加03H所得到的值作为执行地址

7,位寻址:查找单元里某位的值

         位寻址区20H2FH

         例:SETB                   3DH

         3DH里的值改成1

         CLR           3DH

         3DH里的值改0

 

                

三、     *指令系统

1、  数据传送指令(29)

1MOV   <目的操作数>,<源操作数>8位传送指令(15条)

 

 

216位数据传送指令(1条)

MOV   DPTR,#date16

 

3)外部数据传递指令(4条)

MOVX    <目的操作数>,<源操作数>

 

 

 

取数

送数

3MOVC单片机与ROM之间的数据传送

MOVC    A,@A+DPTR

MOVC    A,@A+PC

4)交换类指令(5条)

字节交换指令(3条)

XCH

  低半字节交换指令(1条)低4位进行交换

  XCHD   A ,@Ri    这里假设i=0

  高半字节交换指令===4位交换

  SWAP  A

  交换他自己的高4位和低4

 

  5)堆栈操作指令(2条)

  PUSH direct   POP  direct(压入和弹出)复位后SP=07H

     保护现场

  PUSH 33H

  PUSH 34H

 

  POP  恢复现场

  堆栈原则:后进先出

 

 

 

2、  算术运算类指令(24条)

  ADD   A ,

  ADDC   A,                    A+Rn+Cy

  Cy:是一个进位标志

  SUBB   A,

  ——BCD 调整指令(1条)

  DA        A

  含义:以二进制的形式来描述十进制数。

  进行ADDADDC加法运算的后面

  8421BCD

  乘法指令(条)

  MUL     AB

  AB里的内容相乘

  A中存放结果的低8

  B中存放结果的高8

  例:MOV   A,  #02H

      MOV   B,  #03H

      MUL   AB

      A(06H)     B(00H)

 

      MOV   A,  #20(14H)

      MOV   B,  #20

      MUL   AB

      A(90)   B(01)

  除法指令(1条)

  DIV    AB

      MOV  A,  #25

         MOV  B,  #03

         DIV    AB;

         A(08H)    B(01H)

  A中存放商  B中存放余数

 

  逻辑运算指令(24条)

  逻辑与指令(6条)

  定义:和0相与都为0,和1相与原值不变

逻辑或指令(6条)

定义:与1相或都是1,与0相或原值不变

  逻辑异或指令(6条)

  定义:相同取0,和1相异或取反,和0异或保留原值

  累加器A0和取反指令(非运算)

  CLR  A         0

  CPL  A         取反

 

  控制转移指令(17条)

  ——循环移位指令

   RL  A    向左移          < < < < < < <       小循环

   RR  A    向右移          > > > > > > >

   RLC   A                  Cy   < < < < <     大循环

   RRC   A                  Cy   > > > > >

  应用:跑马灯

例:MOV  A, #01H    8个灯循环点亮

    MOV  P1,  A

    RL   A

    MOV  P1,  A

  *——无条件转移指令(4条)

  无条件/有条件

     1)长转移指令:LJMP     AAAAH;  AAAAH   >PC

     该指令可以转移在64KB程序存储区里

     2)绝对转移指令:AJMP    addr11;  addr11   >PC.10----PC.0

     转移范围为2KB/页地址(现在不常用)

     3)相对转移指令(短转移指令):SJMP   03H

     转移范围  -128+127字节内

     补码:正数的补码就是其原码本身,负数的补码是将原码取反再加1(符号位不变)

     4)散转指令:JMP    @A+DPTR 

     DPTR中的内容作为基地址,通过修改A的内容实现散转

     —条件转移指令(8条)

     1)累加器A0指令(2条)

     2)判别位标志CY状态指令(2条)

   3)判别某位Bit状态指令(3条)

 

     4)减10转移指令(2条)

   5)比较转移指令(4条)

条件转移类指令范例(一)

00H—0FH16个数顺序地置入片内RAM  20H—2FH单元中

   MOV  R0,  #20H

   MOV  R7,  #0FH

   CLR   A

   LOOP:  MOV  @R0,  A

   INC   A

   INC   R0

   DJNZ  R7,  LOOP

   SJMP  $

条件转移类指令范例(二)

   MOV  R0,  #20

   MOV  R7,  #0FH    ;这句话不用写改为10H

   CLR   A

   LOOP:  MOV  @R0,  A

   INC   A

   INC   R0

   CJNE  A,  #0FH, LOOP ;这里也要改成10H

   SJMP  $

 

 

——调用和返回指令(8条)

1)       绝对调用指令(1条)

2)长调用指令(1条)

3)返回指令

  这种程序常常叫作子程序。子程序最后要

 

  位操作指令(17条)

1、  位传送指令

2、  位置位和位清0指令

3、  位运算指令

例:逻辑电路 L=D(E+F)+/G

  MOV   C,  E

  ORL    C,  F

  ANL    C,  D

  ORL    C,  /G

  MOV   20H,  C

 

 

 

 

 

 

 

常用伪指令(17

 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部