• 汇编指令的基本知识


    1  指令

    1.1  定义:指令由操作码和操作数两部分组成;

    a 操作码:

    操作码说明计算机要执行那种操作,它是指令中不可缺少的组成部分。

    每种指令的操作码:用一个唯一的助记符表示(指令功能的英文缩写);对应着机器指令的一个二进制编码。

    b 操作数:

    操作数是  指令执行的参与者,即各种操作的对象。

    指令中的操作数:可以是一个具体的数值;可以是存放数据的寄存器;还可以是指明数据在主存位置的存储器地址。

    1.2  格式: 操作码   操作数1,操作数2 ;注释

    a  操作数1:称为目的操作数dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果。

    b  操作数2:称为源操作数src,  它表示参与指令操作的一个对象。

    c  分号后的内容是对指令的解释

    1.3  表达

    r8: 任意一个8位通用寄存器   (AH   AL   BH   BL    CH  CL  DH  DL)

    r16:任意一个16位通用寄存器(AX   BX   CX   DX    SI   DI   BP   SP)

    r32:任意一个32位通用寄存器(EAX   EBX  ECX  EDX  ESI   EDI  EBP  EDI)

    reg:通用寄存器

    seg:段寄存器(CS    DS   ES    SS)

    m8: 一个8位存储器操作数内存单元

    m16:一个16位存储器操作数内存单元

    m32:一个32位存储器操作数内存单元

    mem:内存单元

    i8:  一个8位立即数

    i16:一个16位立即数

    i32:一个32位立即数

    imm:立即数

    dest:目的操作数(操作数1)

    src:  源操作数(操作数2)

    1.4  多种表达方式

    同一寻址方式可以写成不同的形式:

    MOV  AX,[BX][SI]    ;等同于  MOV AX,[BX+SI]

    MOV  AX,12[BX]   ;等同于  MOV AX,[BX+12]

    MOV  AX,12[BX][SI];等同于  MOV AX,12[BX+SI]或 MOV AX, [BX+SI+12]

    2   寻址方式

    2.1   立即数寻址

    指令中的操作数直接存放在机器代码中,紧跟在操作码之后,通常用于对通用寄存器或内存单元赋值

    2.2  寄存器寻址

    指令中的操作数直接存放在CPU的内部寄存器reg中,在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度。

    2.3  存储器寻址

    指令中给出操作数的主存地址信息(偏移地址,称之为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中

    8086设计了多种存储器寻址方式:

    a 直接寻址方式

    b 寄存器间接寻址方式

    c 寄存器相对寻址方式

    d 基址变址寻址方式

    e 相对基址变址寻址方式

    2.4  直接寻址

    有效地址在指令中直接给出,默认的段地址在DS段寄存器,可使用段超越前缀改变

    2.5  寄存器间接寻址

    有效地址存放在基址寄存器BX或变址寄存器SI,DI中,默认的段地址在DS段寄存器,可使用段超越前缀改变

    2.6  寄存器相对寻址

    有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI

    段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS,可用段超越前缀改变

    2.7  基址变址寻址

    有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成

    段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS,可用段超越前缀改变

    2.8  相对基址变址寻址

    有效地址是基址寄存器(BX或BP)、变址寄存器(SI或DI)与一个8位或16位位移量之和

    段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS,可用段超越前缀改变

    3  栈

    堆栈是一个先进后出FILO的主存区域,位于堆栈段中;SS段寄存器记录其段地址

    堆栈只有一个出口,即当前栈顶,栈顶是地址较小的一端(低端),栈底不变

    用堆栈指针寄存器SP指定

    3.1   基本操作

    只有两种基本操作:进栈和出栈,对应的指令:PUSH和POP

    PUSH:进栈指令先使堆栈指针SP减2,然后把一个字  操作数存入堆栈顶部,

    原型:PUSH  r16/m16/seg

    POP:出栈指令把栈顶的一个字 传送至指定的目的操作数,然后堆栈指针SP加2

    原型:POP  r16/m16/seg

    3.2  特点

    a 堆栈操作的单位是  :字,进栈和出栈只对 字量

    b 字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节

    c  堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据

    d  堆栈常用来:临时存放数据,传递参数,保存和恢复寄存器

  • 相关阅读:
    Vulnhub-靶机-DJINN: 1
    8.8-9 sqlmap从入门到精通-其中小技巧-分析大文件日志技巧
    Vulnhub-靶机-EVM: 1
    8.7 sqlmap从入门到精通-Linux服务器登录连接日志分析
    Linux操作系统常规的分析SSH登录日志需要使用的命令和记录
    CentOS最小安装无法使用ifconfig命令
    CentOS7下安装FTP服务
    解决Centos7安装后无法联网的问题
    Maven引入本地jar包
    Tomcat下安装solr6.x
  • 原文地址:https://www.cnblogs.com/forestsky/p/10902419.html
Copyright © 2020-2023  润新知