16位汇编第五讲----8086指令集(1)
来源:互联网 发布:刮刮卡源码 编辑:程序博客网 时间:2024/05/16 14:36
0x00 数据传送指令
重点掌握指令:
MOV XCHG XLAT PUSH POP LEA
- 通用数据传送指令
1.传送指令MOV
作用:把一个字或者直接的操作数从源地址传送到目的地址
MOV reg/mem,immMOV reg/mem/seg,regMOV reg/seg,memMOV reg/mem,seg
例子:
mov al,4 ;al<--4,字节传送mov cx,0ffh ;cx<--00ffh,字传送mov si,200h ;si<--0200h, 字传送mov byte ptr [si],0ah ;byte ptr 说明是字节操作mov word ptr [si+2],0bh ;word ptr 说明是字操作mov ax,bx ;ax<--,字传送mov ah,al ;ah<--,字节操作mov ds,ax ;ds<--ax,字传送mov [si],al ;[si]<--al,字节传送mov al,[bx]mov dx,[bp] ;dx<--ss:[bp]mov es,[si] ;es<--ds:[si]
不存在存储器向存储器的传送指令
- 非法传送种种
1.两个操作数的类型不一致
2.两个操作数不能都是存储器
3.段寄存器的操作有一些限制
0x01 交换指令XCHG
XCHG reg,reg/mem;reg reg/mem
寄存器与寄存器之间对换数据
寄存器与存储器之间对换数据
不能在存储器与存储器之间对换数据
0x02 换码指令XLAT
作用:将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL
XLAT ;al←ds:[bx+al]
例子:
mov bx,100hmov al,03hxlat
0x03 堆栈的操作
PUSH r16/m16/seg;SP←SP-2;SS:[SP]←r16/m16/segPOP r16/m16/seg;r16/m16/seg←SS:[SP];SP←SP+2
0x04 标志寄存器传送指令
作用:标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作
低8位传送:LAHF和SAHF16位传送:PUSHF和POPF
LAHF
LAHF指令将标志寄存器的低字节送寄存器AH
SF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意SAHF
;FLAGS的低字节←AHSAHF将AH寄存器内容送FLAGS的低字节
用AH的第7/6/4/2/0位相应设置SF/ZF/AF/ PF/CF标志PUSHF
;SP←SP-2
;SS:[SP]←FLAGSPUSHF指令将标志寄存器的内容压入堆栈,同时栈顶指针SP减2
POPF
;FLAGS←SS:[SP]
;SP←SP+2POPF指令将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2
0x05 地址传送指令
- LEA
LEA r16,mem;r16←mem的有效地址EA
例子:
mov bx,0400hmov si,3chlea bx,[bx+si+0f62h];BX=0400h+003ch+0f62h=139EH
- LDS r16,mem
;r16←mem,
;DS←mem+2
LDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器
- LES r16,mem
;r16←mem,
;ES←mem+2
LES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器
0x06 输入输出指令
8086通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(Port)即I/O地址
- 输入输出寻址方式
1.直接寻址:只用于寻址00H~FFH前256个端口,操作数i8表示端口号
2.间接寻址:可用于寻址全部64K个端口,DX寄存器的值就是端口号
对大于FFH的端口只能采用间接寻址方式
- 输入指令IN
作用:将外设数据传给CPU内部的AL/AX。
IN AL,i8;字节输入:AL←I/O端口(i8直接寻址)IN AL,DX;字节输入:AL←I/O端口(DX间接寻址)IN AX,i8;字输入:AX←I/O端口(i8直接寻址)IN AX,DX;字输入:AX←I/O端口(DX间接寻址)
- 输出指令OUT
作用:
OUT i8,AL;字节输出:I/O端口←AL(i8直接寻址)OUT DX,AL;字节输出:I/O端口←AL(DX间接寻址)OUT i8,AX;字输出:I/O端口←AX(i8直接寻址)OUT DX,AX;字输出:I/O端口←AX(DX间接寻址)
0 0
- 16位汇编第五讲----8086指令集(1)
- 16位汇编第五讲各种指令详解第一讲
- 16位汇编第六讲----8086指令集(2)
- 16位汇编第七讲----8086指令集(3)
- 16位汇编第八讲----8086指令集(4)
- 16位汇编第八讲----8086指令集(5)【控制转移类指令】
- 16位汇编第十讲----8086指令集(6)【子程序与中断】
- 16位汇编第六讲汇编指令详解第二讲
- 16位汇编第八讲指令第四讲
- 16位汇编第七讲汇编指令详解第第三讲
- 16位汇编第九讲汇编指令以及逆向中的花指令
- 16位汇编指令
- 16位汇编第四讲----8086寻找方式
- 16位汇编第二讲----8086的寄存器(2016.12.01)
- 16位汇编中的伪指令
- 第五章: 汇编器指令
- 汇编指令8086系统(1)
- ARM汇编指令集1(16_08_26_02)
- Spring笔记(三)AOP前篇之动态代理
- 代码整洁之道读书笔记(十七)
- Spring笔记(四)SpingAOP
- js模板引擎之性能比较
- Scala学习笔记(二)表达式和函数
- 16位汇编第五讲----8086指令集(1)
- zookeeper系列(一)安装
- Scala学习笔记(三)类层级和特质
- Zookeeper系列(二)特征及应用场景
- 基础练习 特殊回文数
- Kafka系列(一)安装和配置说明
- Kafka系列(二)特性和常用命令
- 【Get深一度】小波分析概念1——紧支撑集是什么意思,通俗解释
- Storm系列(一)集群的安装配置