zoukankan      html  css  js  c++  java
  • 汇编语言基本语句

    寻址方式:

    [idata]
    [BX]与寄存器间接寻址
    [BX/SI/DI+idata]
    [BX+SI/DI]
    [BX+SI/DI+idata]

    这些寻址方式可以分别对应于, 一维数组, 二位数组, 结构体, 结构体数组的寻址等。 即在一定程度上, 汇编语言已经为高级语言提供了各种结构的原理和基础。

    INC指令
    格式:inc 操作数   
    ▫功能:将操作数的值加1
    ▫说明:操作数可以是寄存器,也可以是内存单元
     
    DEC指令
    格式:dec 操作数
    功能:将操作数的值减1
    说明:操作数可以是寄存器,也可以是内存单元
     
    AND :逻辑与指令
    格式:AND 目的操作数,源操作数
    操作:按位进行与运算,结果放到目的操作数 
    例如:  mov al, 01100011B

                  and  al, 00111011B

    执行后  (AL)=00100011B
     
    OR :逻辑或指令
    格式:OR 目的操作数,源操作数
    操作:按位进行或运算,结果放到目的操作数 
    例如:  mov  al, 01100011B
                 or      al, 00111011B
    执行后  (AL)=01111011B
     
    NOT:逻辑非(按位取反)
    格式:NOT  操作数
    功能:按位进行非运算
    例如:  mov al, 01100011B
                   not   al
    执行后, (AL)=10011100B
     
     
    XOR:逻辑异或(相同为0,不同为1)
    格式:XOR 目的操作数,源操作数
    功能:按位进行异或运算
    例如:  mov al, 01100011B
                  xor   al, 00111011B
    执行后, (AL)=01011000B
     
    SI为源变址寄存器,DI为目的变址寄存器,一般用于串处理操作。
     
    SI和DI不能分成两个8 位寄存器来使用,但可以和BX一样,实现寄存器间接寻址。
     

      B80100

        mov ax, 1

     CPU内部,指令缓冲器中

        89D8

        mov ax, bx

     CPU内部,BX寄存器中

        A10000

        mov ax, ds:[0]

     内存DS:0字单元

        58

        pop ax

     内存SS:IP字单元

        E520

        in ax, 20H

     20H端口

     
    BP:基址指针寄存器,用作内存单元寻址时和BX类似,但默认段地址在SS中,可以用来直接存取堆栈中的数据。
    说明:在[…] 中,BX、SI、DI、BP可以单个出现,或只能以BX+SI、BX+DI、BP+SI、BP+DI四种组合形式出现。
     
     
    DIV指令
    格式:DIV REG/MEM(除数)
    功能:用显式操作数去除隐含操作数,商和余数按下表的对应关系存放。
     

    除数位数

    被除数

    余数

    8

    AX

    AL

    AH

    16

    DX-AX

    AX

    DX

    例如:

      div bx

      div bl

      div byte ptr ds:[0]

      div word ptr es:[0]

     
    转移指令与程序逻辑控制
    操作符OFFSET
    无条件转移指令JMP
    段内直接短/近转移
    段间直接远转移
    段内/段间间接转移
    条件转移指令JCXZ
     
    汇编语言的程序逻辑控制主要通过修改CS、IP寄存器值实现,对应指令统称为转移指令。
    无条件转移指令JMP
    条件转移指令,如JCXZ
    循环指令,如LOOP
    过程调用、中断
     

    名称

    格式

          段内直接短转移

        JMP SHORT  标号

          段内直接近转移

        JMP NEAR PTR  标号

          段间直接远转移

      JMP FAR PTR    标号

          段内间接转移

      JMP    16位寄存器

      JMP WORD PTR  内存单元地址

          段间间接转移

      JMP DWORD PTR  内存单元地址

     
     
     
    LOOP循环程序框架

            mov cx,循环次数

      s:   循环执行的程序段

           ;;;;;;;

            loop s

     一段安全的内存空间
    在一般PC机的DOS方式下,DOS和其它合法程序一般都不会使用0:200~0:2FF的256 个字节的内存空间,所以使用这段空间是安全的。
     
     
    RET指令:用栈中的数据修改IP的内容,从而实现近转移。
    (IP):=((SS)*16+(SP))    ;POP IP
    (SP):=(SP)+2
     
    RETF指令:用栈中的数据修改CS和IP的内容,实现远转移。
    (IP):=((SS)*16+(SP))    ;POP IP
    (SP):=(SP)+2
    (CS):=((SS)*16+(SP))    ;POP CS
    (SP):=(SP)+2
     
    CALL指令的执行过程为:
    将当前的 IP 或 CS和IP 压入栈中;
    转移。
     
    根据转移距离和是否使用标号,CALL指令具有如下形式:
    CALL 标号
    CALL FAR PTR 标号
    CALL reg
    CALL WORD PTR mem
    CALL DWOED PTR mem
     说明:CALL指令不能实现短转移。
     
    标志寄存器(FLAG):8086 CPU的标志寄存器共16位,其中存储的信息通常被称为程序状态字(PSW)。
    其他寄存器是用来存放数据的,整个寄存器具有一个含义;FLAG是按位起作用的,它的每一位都有专门的含义,记录特定的信息。
     FLAG寄存器的作用:
    存储相关指令的某些执行结果;
    为CPU执行相关指令提供行为依据;
    控制CPU的相关工作方式。
     

    标志位

    取值为1的标记

    取值为0的标记

    OF

    OV

    NV

    DF

    DN

    UP

    SF

    NG

    PL

    ZF

    ZR

    NR

    PF

    PE

    PO

    CF

    CY

    NC

     
    ZF标志
    类型:状态标志。
    功能:记录相关指令执行后,结果是否为0,若结果为0,ZF=1,否则ZF=0。
     
    PF标志
    类型:状态标志。
     功能:记录相关指令执行后,结果的所有二进制位中1的个数是否为偶数,是则PF=1,否则PF=0。
     
    SF标志
    类型:状态标志。
    功能:它记录相关指令执行后,有符号运算结果是否为负,若结果为负,则SF=1,否则SF=0。
     
    CF标志
    类型:状态标志。
    功能:在进行无符号数运算的时候,CF记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。
     
    DF标志
    类型:控制标志。
    功能:在串处理指令中,控制每次操作后SI、DI的递变方式(同增或同减)。
    DF=0,每次操作后SI、DI递增
    DF=1,每次操作后SI、DI递减
     
    ADC指令
    格式:ADC  操作对象1,操作对象2
    功能:
    带进位加法指令 ,利用了CF位记录的进位值;
    操作对象1=操作对象1+操作对象2+CF。
    说明:
    在8086CPU的指令集中,有的指令的执行会影响FLAG,如ADD、SUB、MUL、DIV、INC、OR、AND等,它们大都是运算指令,进行逻辑或算术运算;
    有的指令的执行对FLAG没有影响,如MOV、PUSH、POP等,它们大都是传送指令。
     在使用一条指令的时候,要注意这条指令的全部功能,包括执行结果会对FLAG的哪些标志位造成影响。
     
    SBB指令
    格式:SBB  操作对象1,操作对象2
    功能:
    带借位减法指令 ,利用了CF位记录的借位值;
    操作对象1=操作对象1-操作对象2-CF。
     
     
     
    PS: Intel 格式的汇编码和ATT格式的汇编码略有不同。 例如 Intel中的 mov   是   ATT 中的 movl 等。
     
    ATT 是根据 AT&T(美国电话电报公司)命名的,AT&T运营贝尔实验室多年, 贝尔实验室是历史上最大, 最成功的私有实验室。 在这里, 著名的发明除了电话,还有射电天文望远镜, 晶体管, 数字交换机, C语言,   Unix操作系统 。 此外还发现了电子波动性, 发明了信息论, 组织发射了第一颗通信卫星, 铺设了第一条商用光纤等。
     
  • 相关阅读:
    WinAPI: SetRect 及初始化矩形的几种办法
    [书目20080225]软件工程与项目管理解析
    [转]npkcrypt 服务启动失败
    CPU是为用户服务的
    Web.config基础
    VBScript学习
    [书目20080130]如何成功管理一个软件项目
    [转]DB2常用命令大全
    [转]C++语法概括及其示例(示例代码下载)
    用友华表Cell产生柱状图表
  • 原文地址:https://www.cnblogs.com/acm1314/p/4575850.html
Copyright © 2011-2022 走看看