前言:公号 「编程有料」后台回复 “大礼包” 即可获取近1000本助力你编程之路的电子书
8086CPU 指令系统(重难点)
指令构成的基本原则
- 源、目的操作数的字长一致
MOV AL,BX ;错误 - 源、目的操作数不能同为内存单元
MOV[SI],[DI] ;错误 - 立即数不能作目的操作数
MOV 12H,AL ;错误
数据传送指令(重点)
- 实现在寄存器、存储器及IO端口之间传送数据
- 除标志传送指令外,指令执行结果都不影响标志寄存器
常见的传送指令:
1,MOV 指令
MOV指令注意事项:
- 立即数不能直接送段寄存器
- d、s不同为段寄存器
例1∶编写指令序列把内存单元1000H:2000H开始的一个字送给BX。
MOV AX,1000H
MOV DS,AX
MOV BX,[2000H]
例2:编写指令序列把12H送给内存单元300H:200H。
MOV BX,300H
MOV DS,BX
MOV BYTE PTR [200H],12H
2,XCHG 指令
格式:XCHG d,s
说明:交换s 和 d 的内容,s 和d 的内容都变化
XCHG指令注意事项:
- ①不允许使用立即数
- ②不允许使用段寄存器
3,堆栈操作指令PUSH 和POP
- 堆栈是存储器中的特定区域。
- 堆栈存取规则:后进先出(LIFO或FILO)。
- 在堆栈中始终有一个栈顶单元,该单元的地址为SS:SP。
- 堆栈操作类型:压入和弹出,均以字为单位进行。
- 不管压入还是弹出总是对栈顶进行操作,且栈顶指针SP会自动修改以保持始终指向新的栈顶。
堆栈操作指令注意事项:
- ①不允许使用立即数
- ②必须以字为单位
4,查表转换指令XLAT
格式:XLAT
功能:AL←DS:[BX+AL]
说明:将数据段中首单元偏移地址在BX,顺序号在AL的表的内容取出送AL。
根据下表:
现若要得到数字7 的显示代码,执行如下指令:
MOV BX,1000H
MOB AL,7
XLAT
差不多我们也可以得出这样的结论:XLAT指令相当于在一个字节数组中寻找某个元素:
- ①数组的首地址→BX
- ②数组元素的下标→AL
- ③寻找到的数组元素放在AL中
5,取有效地址的指令
格式:LEA reg16,mem
功能:reg16←memEA
说明:将mem指定的存储器操作数的有效地址取至16位的通用寄存器reg16中。
指令分析:
LEAAX,[2012H] ;相当于 MOV AX,2012H
LEA SI,[BX] ;相当于 MOV SI,BX
LEA指令注意事项:
- ①源操作数必须为存储器寻址方式
- ②目的操作数是16位通用寄存器,不能是段寄存器
6,端口输入指令 IN
格式:IN AL,port8
功能:从I/O端口中读取一个或两个字节到CPU内的AL或AX寄存器。
说明:端口操作数用该端口的地址表示。
指令分析:
IN AL,20H ;AL←(20H)
7,端口输出指令OUT
格式:OUT port8,AL
功能:向I/O端口中输出一个或两个字节。
说明:端口操作数用该端口的地址表示。