因特尔公司的CPU,其定义的指令集一般为复杂指令集CISC,全称为complex instruction set computer
Intel 8086CPU
Intel的CPU,8086CPU下所有寄存器都是16位的
1.环境
- vscode安装MASM/TASM插件
2.8086CPU常用指令
8086微处理器支持8中类型的指令,常见的指令如下所示:
- 数据传送指令
- MOV:传送一个字节(向下兼容)或者字从一个地方到另一个地方
- POP:从栈顶弹出一个字到指定的位置
- IN:从端口读取一个字节或者一个字
- OUT:向端口写入一个字节或者一个字
- LEA:加载操作数的地址到指定的寄存器
- PUSHF:将标志寄存器的值送入栈顶
- POPF:弹出栈顶的值送入标志寄存器
- 运算指令:用于指定加减乘除等操作
- ADD:加法指令
- ADC:带进位加法指令,功能为
操作对象1 = 操作对象1 + 操作对象2 + CF
- INC:将给定的一个字节或者一个字的数据加1
- SUB:减法指令
- SBB:带借位减法指令,功能为:
操作对象1 = 操作对象1 -操作对象2 - CF
- DEC:和INC指令功能相反
- CMP:比较两个字节或者两个字的数据。这个指令的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。
- MUL:乘法指令
- DIV:除法指令
- 位操作指令
- NOT:取反给定字节或者字的每一个位
- AND:按位进行与运算(两者都为1结果才为1)
- OR:按位进行或运算(两者其中一个为1结果就为1)
- XOR:按位进行异或运算(两者相同为0,不同为1)
- SHR:逻辑右移指令,高位补零
- SHL:逻辑左移指令,低位补零
- 中断指令
- int:这个指令用于中断程序的执行,转而去执行中断处理程序。格式为:
int 中断类型码
- iret:这个指令用于从中断处理程序返回到被中断程序,继续执行被中断程序
;汇编语法描述指令功能如下 pop IP pop CS popf (f表示标志寄存器)
- into:这个指令用于当OF = 1时,中断程序的执行
- int:这个指令用于中断程序的执行,转而去执行中断处理程序。格式为:
- 循环控制指令
- loop:这个指令用于循环执行一组指令直到CX寄存器的值为0
- jcxz:如果CX寄存器的值为0,则跳转到指定的地址执行。格式为
jcxz 标号
if ((cx) == 0) { jmp short 标号 // 段内短转移 }
- 处理器控制指令:这些指令都会影响标志寄存器中的某些位
- STC:将CF位设为1
- CLC:将CF位设为0
- STD:将DF位设为1
- CLD:将DF位设为0
- STI:将IF位设为1
- CLI:将IF位设为0
- 串处理指令
- MOVSB:传送一个字节
- MOVSW:传送一个字
- REP:重复执行给定的指令,直到CX寄存器的值为0
- 转移指令
- 无条件转移指令:
- CALL:这个指令用于调用其他子程序(或者说高级语言中的函数),其进行两步操作
1. 将当前的IP或者CS和IP压入栈中 2. 转移
- RET:这个指令用于从子程序(被调用程序)中返回到调用程序,继续执行
(IP) = ((ss) * 16 + (SP)) (SP) = (SP) + 2 相当于 pop IP
- JMP: 转移到指定的地址执行
- 条件转移指令
- JZ:标志寄存器的ZF标志位为1则跳转
- 无条件转移指令:
3.8086CPU常用寄存器
- AX
- BX
- CX
- DX
- SI:SI和DI是8086CPU中和BX功能相近的寄存器,但是si和di不能拆分为两个8位寄存器使用。
- DI
- DS
- CS
- IP
- SS
- ES
- SP
- BP
- FLAG:标志寄存器,其值又被称为程序状态字(PSW)
4.章节
参见:<<汇编语言第四版>>
Intel X86架构处理器
待续
Intel X86_64架构处理器
待续