• 80X86学习笔记数据传送指令


    一.传送指令

    格式:mov dst, src

    源操作数可以使累加器,寄存器,存储单元,立即数。

    目的操作数不能为立即数。

    注意问题:

    源和目的操作数不能同时是段寄存器;代码段寄存器cs不能作为目的寄存器;ip既不能作为源,也不能作为目的。

    源操作数与目的操作数类型要一致16对16位, 8位对8位。

    两个操作数不能都为存储器,必须有一寄存器。

    数据传送指令能实现下列传输功能:

    1.cpu内部寄存器间数据传送

    mov ah, al

    mov dl, dh

    mov bp, sp

    mov as, cs

    2.立即数送通用寄存器或存储单元(立即数不能直接送到段寄存器)

    mov al, 2

    mov si, –5

    mov varb, –1

    mov varw, 1234h

    mov [si], 1234h

    mov al, ‘D’

    3.寄存器与存储器间数据传送

    mov a, varw

    mov bh, [di]

    mov dl, es:[si+3]

    mov varb, dl

    mov ds:[bp], dl

    mov varw, ds

    mov es, varw

    --------------------------------

    mov ax, offset table

    offset为属性操作符,把table偏移地址送至ax。

    二.交换指令

    通用寄存器与通用寄存器或存储单元数据的交换,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。

    格式:

    xchg oprd1, oprd2

    三.地址传送指令

    (1)lea

    传送有效地址指令

    格式:

    lea reg, oprd

    oprd必须是一个存储器操作数

    reg必须是一个16位通用寄存器

    lea ax, buffer

    lea ds, [bs+s]

    lea sl, [bx+si+2]

    (2)lds

    段值和段内偏移构成一个32位地址指针,该指令传送这个32位指针

    格式:

    lds reg, oprd

    reg<-[src]

    ds<-[src+2]

    段值送到ds

    偏移送到reg

    (3)指令les(load point into es)

    les也是传送32位地址指针

    les reg, oprd

    reg<-[src]

    es<-[src+2]

    四.堆栈操作指令

    堆栈操作以字为单位。

    (1)进栈push

    格式:

    push src

    执行操作:sp<-sp – 2

    先把堆栈指针寄存器sp的值减2,然后把源操作数src送入由sp所指的栈顶,源操作数src可以是通用寄存器喝段寄存器,也可是字存储单元。

    (2)出栈pop

    格式:

    pop dst

    dst可以是通用寄存器喝段寄存器(cs例外),也可是字存储单元。

    例子1:

    临时保存寄存器内容

    push ax

    push bx

    pop bx

    pop ax

    例子2:

    push si          pop si

    push ds         pop ds

    push varw     pop varw

    push[si]        pop [si]

    数据交换的三种方式:

    用mov,利用寄存器过度方法

    mov bx, ax

    mov ax, si

    mov si, bx

     用交换指令xchg

    xchg ax, si

     用堆栈指令

    push si

    push ax

    pop ax

    pop si

    五.标志操作指令

    (1)标志传送指令

    LAHF(load ah with flags)

    该指令把标志寄存器的低8位(包括sf,zf,af,pf,cf)传送到寄存器ah的指定位。

    SAHF

    与LAHF相反

    PUSHF

    该指令把标志寄存器内容压入堆栈

    POPF

    (2) 标志位操作指令

    CLC清进位标志

    STC置进位标志,进位标志位1.

    CMC进位标志取反指令

    CLD清方向标志指令,使方向标志DF为0.

    STD置方向标志

    CLI清中断允许标志指令,该指令使中断允许标志IF为0,cpu不再响应来自外部装置的可屏蔽中断,但对不可屏蔽中断和内部中断都没有影响。

    STI置中断允许标志允许指令,该指令使IF为1,cpu可以响应可屏蔽中断。

  • 相关阅读:
    C语言判断字符串是否是 hex string的代码
    红米手机使用应用沙盒一键修改sdk信息
    Python illustrating Downhill simplex method for minimizing the user-supplied scalar function的代码
    荣耀5.0以上手机(亲测有效)激活xposed框架的经验
    java压缩指定目录下的所有文件和文件夹的代码
    荣耀7.0系统手机最简单激活Xposed框架的步骤
    小米平板7.0系统如何不root激活Xposed框架的方法
    安装与配置Flutter开发环境
    Spring Boot 2
    Flutter介绍
  • 原文地址:https://www.cnblogs.com/seebro/p/2394681.html
Copyright © 2020-2023  润新知