汇编--普及

 

1、MOV BX, OFFSET TABLE 将TABLE的偏移地址送给BX。OFFSET位属性操作符  

与  LEA  BX,TABLE 相同

2、push pop 不能用立即数寻址方式,pop指令为段寄存器时,不允许是CS

3、XCHG指令中两个操作数不允许使用段寄存器。

 

4、类型转换指令   CBW   CWD 影响条件标志位

 

5、CMP 和 SUB 指令一样执行减法。但是不保存结果,只是根据结果设置条件标志位。

8短,16近。 JMP中位移量位8位时为短跳跃,为16位时为近跳跃。

 

 

 

 

 

 

处理器(CPU),所能识别的就是一串二进制机器语言的代码

java 的抽象就是java虚拟机的抽象.

中文编码unicode   4个字节  ASCII   1个字节

 PTR 属性操作符,可以制定操作数的类型属性,优先于隐含的类型属性。

Bit意为""或"比特",是计算机运算的基础; 
Byte意为"字节",是计算机文件大小的基本计算单位; 
1byte=8bits,两者换算是1:8

al  是  8比特,8位,  有低四位 高四位.1字节

汇编语言程序的语句除  治理了难过 意外还可以有 位操作和宏指令组成.
MOV传送的是地址所指的内容,而LEA只是地址。0

LEA REG,SRC
link  连接  库文件 ,和 目标文件成为 可执行文件 exe 

SS:BP  堆栈

DS:SI

ES:DI

 

如果乘积结果的高半部分等于零则CF=OF=0否则CF=OF=1

简化段定义  mov ax,@data  mov ds,ax

neg是求补指令

STOS 该指令把AL,AX,EAX中的值存入到由目的寄存器DI指向的附加段的某单元中,并根据控制标志位DF的值和数据类型修改目的变址寄存器的值。

LODS  该指令把源变址寄存器SI指向的数据段中某单元的内容送到AL,AX,EAX中,并根据控制标志位DF的值和数据类型修改源变址寄存器的值。

 

另一组是指针寄存器和变址寄存器,包括:
SP(Stack Pointer): 堆栈指针,与SS配合使用,可指向目前的堆栈位置
BP(Base Pointer): 基址指针寄存器,可用作SS的一个相对基址位置
SI(Source Index): 源变址寄存器,可用来存放相对于DS段之源变址指针
DI(Destination Index): 目的变址寄存器,可用来存放相对于ES 段之目的变址指针。
 
控制标志位为方向标志,(direction flag,DF)DF为1每次操作后变址寄存器SI和DI减小,为0则增大。
 
 
name  LABLE type  
 

  将段地址装入相应的段寄存器中

三、地址传送指令

  (1) 格式:LEA REG,MEM
  功能:将源操作数的有效地址传送到通用寄存器,操作数REG为16位或32位通用寄存器,源操作数为16位或32位存储器操作数。
  例 3.21
  LEA BX,BLOCK;将BLOCK的有效地址传送到BX中(16位)
  LEA EAX,/[EBX/];将EBX内容(有效地址)传送到EAX中(32位)

一、字符串处理指令

(1) lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据DF标志增减SI

(2) stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI

(3) movsb、movsw:把DS:SI指向的存储单元中数据装入ES:DI指向的存储单元中,然后根据DF标志分别增减SI和DI

(4) scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI

(5) cmpsb、cmpsw:把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI

(6) rep:重复其后的串操作指令。重复前先判断CX是否为0,为0就结束重复,否则CX减1,重复其后的串操作指令。主要用在MOVS和STOS前。一般不用在LODS前。

上述指令涉及的寄存器:段寄存器DS和ES、变址寄存器SI和DI、累加器AX、计数器CX
           涉及的标志位:DF、AF、CF、OF、PF、SF、ZF

 NOP  无操作指令 ,占一个字节的空间,调试的时候用

HLT     停机指令   

ESC     换码指令

WAIT   使处理机处于空转状态

LOCK   前缀    维持总线的锁存信号

BOUND   界限指令

ENTER   建立堆栈帧

LEAVE    释放堆栈帧

 

SEGMENT  伪操作

MODEL       伪操作 

状态标志  : 记录指令操作结果的标志, 共6位 :  OF , SF ,ZF ,AF ,PF ,CF  

控制标志  : 控制操作的标志,如DF位

 

段跨越前缀  ,如允许数据存放在除DS段以外的其他段中.

串处理指令的目的串必须用ES段

 

MOV AX,[BX][BP]    错误,BX和BP不能配对   可以修改为MOV AX,[BX][SI]

MOV AX,[BX][SI]     就是把DS*16+BX+SI中存放的数据传送到寄存器AX中

汇编中DUP和EQU指令的含义是什么? 

s db 30 dup(0)    定义一个字节型变量,该变量占用30个字节,所有字节被初始化成0

在汇编定义变量的时候会用到dup。
变量名    类型  初值表
Dup用于把一个相同值赋值若干次。
重复次数 dup(数据项)


equ是一个代码替换指令
比如:
s equ bx+si
mov cx,[s]
那么上面两句代码相当于如下指令:
mov cx,[bx+si]

DF是程序状态寄存器中的控制标志位

 

VAP1 DB ’12345’    ;定义VAR1为字节数据类型  5个字节
VAP2 DW 10 dup(?) ;定义VAR2为字数据类型 10个字
LEN EQU $-VAR1 ;符号定义 相当于len=$-var1 $为程序指针 这样就得到了已定义数据的长度 长度为 10*2+5

 mov ax,seg buf 的执行,是把BUF所在段的地址送到AX中。

无符号数和带符号数的两组条件转换指令,每条指令都有完全扥小的两个指令助记符,例如,JL指令另一个指令助记符是JNGE

 

 

关于SEG 指令  指出下一条指令将使用段超越

mov [si], ax表示将ax中的内容存入ds:si指向的内存单元,也就是说在寄存器间接寻址的情况下,以si间接寻址时总是默认以ds为相应的段地址寄存器。同样 di是以es为默认的段地址寄存器。DS:SI    ES:DI

seg cs 这样的语句只影响到它下一条指令,比如在linux启动代码中的一段:

seg cs

mov sectors,ax        等价于mov cs:[sectors],ax    seg cs只是表明紧跟它的下一条语句将使用段超越

mov ax,#INITSEG

 

 

CALL RET 指令都不影响条件码

INT      中断

INTO     如溢出则中断

IRET/IRETD  从中断返回

 

 

 

 

LOOP AGAIN        不影响标志位   循环指令不影响条件码

LOOPZ/LOOPE      ZF=1且CX!=0

LOOPNZ/LOOPNE  ZF=0且cx!=0

 

你可能感兴趣的:(汇编--普及)