📜  机器指令

📅  最后修改于: 2021-06-28 09:18:41             🧑  作者: Mango

机器指令是用机器(计算机)的机器代码编写的可以识别和执行的命令或程序。

  • 一条机器指令由内存中的几个字节组成,这些字节告诉处理器执行一个机器操作。
  • 处理器依次查看主存储器中的机器指令,并为每条机器指令执行一次机器操作。
  • 主存储器中机器指令的集合称为机器语言程序。

机器代码或机器语言是一组直接由计算机的中央处理单元(CPU)执行的指令。每条指令对CPU寄存器或内存中的数据单元执行非常特定的任务,例如加载,跳转或ALU操作。 CPU直接执行的每个程序都由一系列此类指令组成。

机器指令的一般格式为

[Label:]                 Mnemonic      [Operand, Operand]                  [; Comments]
  • 方括号表示字段是可选的
  • 标签是一个标识符,该标识符被分配了出现该指令的指令的第一个字节的地址。后面必须加上“:”
  • 包含空格是任意的,但必须至少插入一个空格。没有空间会导致歧义。
  • 评论字段以分号“;”开头。 ”

例子:

Here:                 MOV      R5,#25H                 ;load 25H into R5

8086微处理器中使用的机器指令

1.数据传输指令–移动,负载交换,输入,输出。

  • MOV:将字节或字移动到寄存器或存储器。
  • IN,OUT:从端口输入字节或字,向端口输出字。
  • LEA:加载有效地址
  • LDS,LES使用数据段(额外的段)加载指针。
  • 推,弹出:将单词推到堆栈上,弹出单词从堆栈上弹出。
  • XCHG:交换字节或字。
  • XLAT:使用查找表转换字节。

2.算术指令–加,减,增,减,转换字节/字并进行比较。

  • ADD,SUB:加,减字节或字
  • ADC,SBB:加,减字节或字并进位(借位)。
  • INC,DEC:递增,递减字节或字。
  • NEG:取反字节或字(二进制补码)。
  • CMP:比较字节或字(减去而不存储)。
  • MUL,DIV:相乘,除以字节或字(无符号)。
  • IMUL,IDIV:整数乘法,除法字节或字(带符号)
  • CBW,CWD:将字节转换为字,将字转换为双字
  • AAA,AAS,AAM,AAD:ASCII调整add,sub,mul,div。
  • DAA,DAS:十进制调整加,减(BCD编号)

3.逻辑指令– AND,OR,异或,移位/旋转和测试

  • NOT:字节或字的逻辑非(补码)
  • AND:字节或字的逻辑与
  • OR:字节或字的逻辑或。
  • XOR:字节或字的逻辑异或
  • 测试:测试字节或字(并且不存储)。
  • SHL,SHR:逻辑移位旋转指令向左,向右字节或字移位?通过1或CL
  • SAL,SAR:算术向左,向右字节或字移位? 1或CL
  • ROL,ROR:旋转左,右字节或字?乘以1或CL。
  • RCL,RCR:通过进位字节或字向左,向右旋转?减1或CL。
  1. 字符串操作指令–加载,存储,移动,比较和扫描字节/字
  • MOVS:移动字节或字符串
  • MOVSB,MOVSW:移动字节,字符串。
  • CMPS:比较字节或字符串。
  • SCAS S:可以字节或字符串(与A或AX相比)
  • LODS,STOS:将字节或字符串加载,存储到AL。

5.控制传递指令–有条件,无条件,调用子例程和从子例程返回。

  • JMP:无条件跳转。它包括循环传输以及子例程和中断指令。
  • JNZ:跳到计数器值减为零,然后运行循环直到CX中存储的值变为零

6.循环控制指令-

  • LOOP:无条件循环,以CX计,短跳转到目标地址。
  • LOOPE(LOOPZ):如果相等(零),则循环,以CX计数,短跳转到目标地址。
  • LOOPNE(LOOPNZ):如果不相等(不为零),则循环,以CX计数,短跳转到目标地址。
  • JCXZ:如果CX等于零,则跳转(用于循环跳过代码)。
  • 子程序和中断指令-
  • 调用,返回:调用,从过程中返回(在当前段的内部或外部)。
  • INT,INTO:软件中断,溢出时中断IRET:从中断返回。

7.处理器控制说明-

标志操作:

  • STC,CLC,CMC:设置,清除,补码进位标志。
  • STD,CLD:设置,清除方向标志STI,CLI:设置,清除中断使能标志。
  • PUSHF,POPF:将标志压入堆栈,将标志弹出堆栈。

样本门问题

考虑下面给出的机器指令的顺序:

MUL R5, R0, R1
  DIV R6, R2, R3
  ADD R7, R5, R6
  SUB R8, R7, R4

按照上述顺序,R0至R8是通用寄存器。在所示的指令中,第一个寄存器存储在第二个和第三个寄存器上执行的操作的结果。该指令序列将在流水线指令处理器中以以下4个阶段执行:(1)指令提取和解码(IF),(2)操作数提取(OF),(3)执行操作(PO)和(4) )写回结果(WB)。 IF,OF和WB级对于任何一条指令每个都占用1个时钟周期。对于ADD或SUB指令,PO级花费1个时钟周期,对于MUL指令,PO级花费3个时钟周期,对于DIV指令,花费5个时钟周期。流水线处理器使用从PO阶段到OF阶段的操作数转发。执行上述指令序列所需的时钟周期数为___________
(A) 11
(B) 12
(C) 13
(D) 14

答案:(C)

解释:

1   2   3   4   5   6   7   8   9   10   11   12   13
  IF  OF  PO  PO  PO  WB
      IF  OF          PO  PO  PO  PO  PO   WB
          IF          OF                   PO   WB
              IF          OF                    PO   WB