微机原理笔记(4)

一、数据传送指令

1、数据传送指令MOV

  • 语句格式:MOV  OPD,OPS
  • 功能:将源操作数传入目的地址,源地址内容不变。即(OPS)-->OPD

微机原理笔记(4)_第1张图片

注意: 

  • MOV指令不改变源操作数内容不影响标志位
  • 源操作数和目的操作数应该有相同的类型,即必须同为字节型或字型。
  • 代码段寄存器CS不能用作目的操作数,即不允许给CS赋值
  • 立即数不能用作目的操作数,立即数也不能直接传送数据给段寄存器
  • 源操作数和目的操作数不能同时为存储单元操作数
  • 不允许在段寄存器之间直接传送数据

2、进栈指令PUSH

  • 语句格式:PUSH    SRC
  • 功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2
       即:(SP)-2 --> SP 

3、出栈指令POP

  • 语句格式:POP  OPD
  • 功能:将栈顶元素弹出送至某一寄存器、段寄存器(CS除外)或存储器,堆栈指针加2。

4、数据交换指令XCHG

  • 语句格式:XCHG   OPR1,OPR2
  • 功能:将源地址与目的地址中的内容互换。 

5、累加器专用传送指令:输入指令IN/输出指令OUT 

  • 输入指令用来从指定的外设寄存器取信息送入累加器。
  • 此指令实现I/O端口CPU之间的数据传送。
    • 输入指令  IN    acc,PORT/DX
    • 输出指令  OUT   PORT/DX,acc
  • 指令采用两种寻址方式:
    • 直接寻址:在指令中直接给出端口的8位地址,因此可寻址256个端口
    • 间接寻址:在指令中用寄存器DX给出端口的16位地址,因此可寻址65536个端口
  • 用输入指令完成从输入端口到CPU的数据传送
  • 用输出指令完成从CPU到输出端口的数据传送 

注意:

  • 输入/输出指令只能使用累加器AL或AX接收或发送数据。
  • 使用短格式指令,必须将端口地址放入寄存器DX中。
  • 输入/输出指令不影响标志位 

6、地址传送指令

1、有效地址传送指令LEA

  • 格式:LEA   OPD,OPS
  • 功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。
  • 补充:以下两条语句等效
    • MOV  BX,OFFSET   NUM;将NUM的偏移地址送入BX中
    • LEA   BX,NUM    ;将NUM的偏移地址送入BX中

2、指针送寄存器和DS指令LDS

  • 格式:LDS    OPD , OPS
  • 功能:将主存中指定字单元数据送入指定存储器下一字单元数据送DS寄存器
  • 即(OPS)--> OPD,(OPS+2)-->DS

3、指针送寄存器和附加数据段ES指令LES 

  • 格式:LES   OPD,OPS
  • 功能:将主存某字节单元内容送指定寄存器,下一字单元数据送ES寄存。
    • 即(OPS)-->OPD,(OPS+2)--> ES。

二、算术运算指令

1、加法指令ADD、带进位加指令ADC

  • 格式:ADD   DST,SRC;

  • 指令的功能是把源操作数的值加到目的操作数中。

  • 根据结果设置FLAGS的OF,SF,ZF,AF,PF和CF标志位 

  • 格式:ADC   DST,SRC;
  • 指令的功能是把源操作数和进位标志位CF的值(0/1)一起加到目的操作数中 
  •  加1指令INC
    • 格式:INC   OPR;
    • 功能:把操作数的值加1(不影响CF
  • 交换加指令XADD
    • 格式:XADD   oprd1,oprd2;
    • 功能:交换两个操作数的值,再进行算术“加”法操作。

2、减法指令SUB

  • 格式:SUB   DST,SRC ;
  • 功能:目的操作数(DST)减去源操作数(SRC)
  • 影响六个状态标志,AF为半借位,CF为借位

带借位减SBB 

  • 格式:SBB   DSI,SRC;
  • 把源操作数和标志位CF的值从目的操作数中一起减去。

减1指令DEC

  • 格式:DEC   OPR;
  • 把操作数的值减去1(不影响CF

求补指令NEC

  • 格式:NEC   OPR;
  • 功能:操作数= 0 - 操作数。 

比较指令CMP

  • 格式:CMP   OPD,OPS     
  • 功能:目的操作数减源操作数,与SUB指令一样执行减法操作,但不回送相减结果,结果只影响标志位
  • (OPD)-(OPS)。CMP指令通常用在选择结构程序中,其后紧跟着条件转移指令,用来根据比较结果转向不同的程序分支。

3、乘法指令MUL

无符号乘法指令MUL

  •  格式:MUL    src
  • MUL为操作码助记符;src为源操作数(乘数),也可以是寄存器或存储单元,但不能使用立即数或段寄存器。
  • 功能:两个无符号数相乘。
    • 字节乘法:AX <--(AL)*(src)
    • 字乘法:DX(高字),AX(低字)<--(AX)*(src)
  • 注意:指令中只指定乘数,被乘数默认在寄存器ALAX。该指令只影响状态标志CF和OF,对其它标志位无定义。

有符号乘指令IMUL

  • 格式:IMUL   SRC
  • 功能:
    • 字节乘法:(AL)*(SRC)--> AX
    • 字乘法:(AX)*(SRC)--> DX、AX
  • IMUL指令除计算对象是带符号二进制数外,其他都与MUL一样,但计算结果不同。

4、除法指令DIV

除法指令的被除数是隐含操作数,除数在指令中显式地写出来。
除法指令功能是用显式操作数除隐含操作数,可得到余数。当除数为0,或商超出数据类型所能表示的范围时,系统会自动产生0号中断。

无符号除指令DIV

  • 格式:DIV   OPS;
  • 功能:
    • 字节除法:(AX)/(OPS)--> AL(商)、AH(余数)
    • 字除法:(DX、AX)/(OPS) -->  AX(商)、DX(余数)

有符号除指令IDIV

  • 格式:IDIV   OPS;
  • 功能:
    • 字节除法:(AX)/(OPS)-->  AL(商)、AH(余数)
    • 字除法:(AD、AX)/(OPS)-->  AX(商)、DX(余数)
  • 8086/8088规定IDIV指令运算结果余数的符号与被除数相同
  • 除法指令DIV和IDIV虽然对标志位的影响未定义,但可产生溢出

字节转换成字指令CBM

  • 格式:CBM
  • 功能:将AL中的符号位数据扩展至AH(补0)。

字转换为双子指令CWD

  • 格式:CWD
  • 功能:将AX中数的符号扩展到DX中。若AX中的数为正数,则(DX)=0000,否则(DX)=0FFFFH

5、十进制调整指令BCD码

  • BCD码是一种用二进制编码的十进制数,又称二一十进制数。
  • ...略* 

三、逻辑运算和移位指令 

1、逻辑指令

逻辑指令对字节或字数据进行按位的运算操作。

  • 逻辑与AND   DST,SRT;-->(DST)
    设置CF=OF=0,影响SF、ZF、PF、对AF无定义
  • 逻辑或OR    DST,SRC;-->(DST);标志同上
  • 逻辑非NOT  OPR;-->(OPR);不影响标志位
  • 异或XOR   DST,SRC;-->(DST);标志同AND
  • 测试TEST   OPR1,OPR2;运算与AND相同,但不保存结果,只根其特征置条件标志。 

2、移位指令 

移位指令从移位方向上分为左移或右移;从移位功能上可以分为算术逻辑移位或循环移位,前者是开环的;后者是闭环的;从位移次数上可以分为一次移位或多次移位。

逻辑左移指令SHL

  • 格式:SHL   OPD,1  或  SHL   OPD, CL
  • 功能:将OPD的内容向左移动指定的位数最高位移入CF中,低位补0

微机原理笔记(4)_第2张图片

算术左移指令SAL

  • 格式:SAL   OPD,1 或 SAL   OPD,CL
  • 功能:其操作与逻辑左移指令SHL完全相同

逻辑右移指令SHR

  • 格式:SHR   OPU,1 或 SHR   OPD , CL
  • 功能:将OPD的内容向右移动指定的位数最低位移入CF中,高位补0

微机原理笔记(4)_第3张图片

算术右移指令SAR

  • 格式:SAR  OPD,1 或 SAR  OPD,CL
  • 功能:将OPD的内容向右移动指定的位数最低位移入CF中,最高位保持不变

微机原理笔记(4)_第4张图片

循环左移指令ROL

  • 格式:ROL   OPD,1ROL   OPD,CL
  • 功能:将OPD的内容向左移动指定的位数最高位同时移入最低位CF

微机原理笔记(4)_第5张图片

  • 循环位移可以改变操作数中原有位的位置

循环右移指令ROR

  • 格式:ROR   OPD,1 或 ROR   OPD,CL
  • 功能:将OPD的内容向右移动指定的位数最低位同时移入最高位CF中。

微机原理笔记(4)_第6张图片

带进位的循环左移指令RCL

  • 格式:RCL   OPD,1 或 RCL   OPD,CL
  • 功能:将OPD的内容连同CF标志一起向左循环所规定的位数。

四、串操作指令

为8086提供一组处理主存中连续存放数据串的指令

1、与REP相配合工作的MOVS,STOS和LODS指令

 REP重复串操作

  • REP前缀用在串传送指令MOVS存入串指令STOS从源串中取数指令LODS指令
  • 功能:每执行一次串指令(CX)-1,直到(CX)=0,重复执行结束。
  • 例:REP  MOVS

MOVS串传送指令

  • 格式:
    • MOVSB----字节串传送
    • MOVSW----字串传送
  • 功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中,并自动修改指针使之指向下一个字节(或字)存储单元。 

存入串指令STOS

  • 格式:
    • STOSB----往字节串中存数
    • STOSW----往字串中存数
  • 功能:将AL或AX中的数据送入DI所指的目的串中的字节(或字)存储单元中。
  • 即字节操作:(AL)--> [DI]
        字操作:(AX)-->[DI]
  • 修改指针DI,使之指向串的下一个元素

从源串中取数指令LODS指令

  • 格式:
    • LODSB----从字节串中取数
    • LODSW---从字串中取数
  • 功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中。
  • 即:字节操作:([SI])-->AL,字操作:([SI])--> AX
         修改指针SI,使它指向串中的下一个元素。
  • 当DF=0,(SI)增量。当DF=1时,(SI)减量。

2、与REPE/REPZ和REPNE/REPNZ联合工作的串比较指令CMPS和串扫描指令SCAS 

REPE/REPZ

  • 某次比较的结果两个操作数相等,或两个操作数相减为零重复串操作
  • 一般用在CMPS,SCAS指令前。
  • 功能:每执行一次串指令(CX)-1,并判断ZF标志是否为0,只要(CX)=0或ZF=0,则重复执行结束。

REPNE/REPNZ

  • 某次比较的结果两个操作数不相等,或两个操作数相减不为零时重复串操作。
  • 一般用在CMPS,SCAS指令前。
  • 功能:每执行一次串指令(CX)-1,并判断ZF标志是否为0,只要(CX)=0或ZF=1,则重复执行结束。

CMPS串比较指令

  • 格式:
    • CMPSB----字节串比较
    • CMPSW---字串比较
  • 功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的串中的一个字节(或字)存储单元的数据相减,并根据相减结果设置标志,单结果不保存
  • 即:([SI])-([DI])
        修改串指针,使之指向串中的下一个元素。

串扫描指令SCAS

  • 格式:
    • SCASB---字节串搜索
    • SCASW---字串搜索
    • 功能:AL(字节)或AX(字)中的内容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位结果不保存
    • 即:字节操作:(AL])-([DI])字操作:(AX])-([DI])
          修改串指针,使之指向串中的下一个元素。
    • 当DF=0,(DI)增量。当DF=1时,(D)减量。

五、控制转移指令

1、无条件转移指令

段内转移指令JMP

  •  格式:
    • 段内直接短转移:JMP   SHORT   OPR;(IP)<--(IP)+8位位移量
    • 段内直接近转移;  JMP    NEAR    PTR    OPR;(IP)<--(IP)+16位位移量
    • 段内间接转移: JMP    WORD   OPR;(IP)<--(EA),WORD、PTR是运算符

段间转移指令

  • 格式:
    • 段间直接(远)转移  JMP    FAR   PTR   OPR;   IP<--P[R的端内偏移地址,CS<-OPR的段地址
    • 段间间接转移   JMP   DWORD   PTR   OPR;IP<--(OPR)段内偏移地址,CS<--(OPR+2)

2、条件转移指令 

条件转移指令将前一条指令执行结果对状态标志位的影响,作为程序转移的条件。满足条件时转移到指令指定的地址,否则将顺序执下条指令。可作为判断条件的状态标志位有CF、DF、ZF、SF和OF。

条件转移指令都是采用相对寻址方式的双子节指令,操作码+位移量。不影响状态标志。

微机原理笔记(4)_第7张图片

微机原理笔记(4)_第8张图片

微机原理笔记(4)_第9张图片

测试寄存器CX的值为0转移指令

  • 格式:
    • JCXZ   OPR:  (CX)=0则转移
  • 此指令在循环结构的程序中,将寄存器CX用作计数器,根据寄存器CX内容的修改情况实现二分支转移

3、循环控制指令

(1):LOOP    OPR(CX)不等于0 循环,否则顺序执行

(2):为零/相等循环:LOOPZ/LOOPE   OPR;当ZF=1且(CX)不等于0则循环。反之

(3):不为零/不相等循环:LOOPNZ/LOOPNE;与上相反

注意:

  • 使用循环控制指令之前,必须在寄存器CX(作为计数器)中预置循环次数的初值
  • 执行循环控制指令时,将完成(IP)<--(IP)+8位位移量(符号位扩展到16位)的操作
  • 循环控制指令不影响状态标志位
  • 循环控制指令主要用于数据比较、查找关键字等操作 

六、处理器控制指令

1、子程序调用及返回指令

调用指令CALL

  • 段内直接调用CALL   DST;(SP)<--(SP)-2
  • 例:
    • CALL   3000H:指令直接给出调用地址3000H
    • CALL  NEAR  PTR   SUBR;指令直接给出调用的“近”过程名SUBR
      • :NEAR   PTR是段内调用运算符。
    • 段内间接调用CALL   DST;

返回指令RET

  • 段内返回RET

2、中断指令

  •  计算机程序运行期间遇到某些特殊情况时,需要CPU停止当前的程序转去执行一组专门的程序,这种情况称为中断,这组程序称为中断服务程序。
  • 8086中断分为外部中断内部中断。外部中断通过外部设备接口向CPU的中断请求引脚发出请求,内部中断则由CPU执行中断指令而产生
  • 中断指令:INT    TYPE
  • 溢出中断指令:INTO;当运算结果溢出时OF=1并产生中断。
  • 中断返回   IRET;

3、其它处理机控制指令

空操作指令NOP

  • 格式:NOP
  • 此指令为单字节指令,不执行任何操作,只起到占用存储器空间时间延迟的作用。
  • 处理器控制指令中,只有状态标志位操作指令影响指定的标志位,其他指令不影响。

停机指令HLT

  • 格式:HLT
  • 此指令可暂停计算机工作,使处理器处于停机状态,用于等待一次外部中断的产生,中断结束后,继续执行下面的程序。

等待指令WAIT

  • 格式:WAIT
  • 此指令使处理器处等待状态,也可以用来等待外部中断发生,但中断结束后仍返回WAIT指令继续等待。本指令不允许使用立即数和寄存器寻址方式

你可能感兴趣的:(微机原理笔记,笔记,单片机)