机器指令是用机器(计算机)的机器代码编写的可以识别和执行的命令或程序。
- 一条机器指令由内存中的几个字节组成,这些字节告诉处理器执行一个机器操作。
- 处理器依次查看主存储器中的机器指令,并为每条机器指令执行一次机器操作。
- 主存储器中机器指令的集合称为机器语言程序。
机器代码或机器语言是一组直接由计算机的中央处理单元(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。
- 字符串操作指令–加载,存储,移动,比较和扫描字节/字
- 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