汇编语言基本语句

寻址方式:

[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操作系统 。 此外还发现了电子波动性, 发明了信息论, 组织发射了第一颗通信卫星, 铺设了第一条商用光纤等。
 
原文地址:https://www.cnblogs.com/acm1314/p/4575850.html