汇编基础知识

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编

天草软件安全培训学员

1. 通用寄存器:

EAX ECX EDX EBX ESP EBP ESI EDI (图1)

(图1)

数据寄存器以及定义:EAX ECX EDX EBX用来暂时存放计算过程中所用的操作数、结果或其他信息。

EAX(Accumilator):累加器,算数运算的主要寄存器

ECX(Count):计数器,在循环(LOOP)和传处理指令中用作隐含的计数器

EDX(Date):数据寄存器,一般在做双字长运算时把EDX和EAX组合在一起放一个双字长数,EDX用来存放高位数字

EBX(Base):基址寄存器,寄存器以及定义:ESP EBP ESI EDI它们可以像数据寄存器一样在运算过程中存放操作数,但它们只能16位使用。此外它们更经常的用途是在段内寻址时提供偏移地址。

ESP(Stack Pointer):堆栈指针寄存器,表示栈顶的偏移地址

EBP(Base Pointer):基址指针寄存器,可作为堆栈区中的基值地址以便访问堆栈中的其他信息。。

ESI (Source Index):原地址指针寄存器

EDI(Destination Index):目的地址指针寄存器

ESI和EDI一般与EDS联用,用来确定数据段中某一存储单位的地址。这两个变址寄存器有自动增量和减量的功能。

2. 段寄存器:

ES CS SS DS FS GS(图2)

(图2)

CS:代码段(Code Segment)

DS:数据段(Data Segment)

ES:附加数据段(Extra Segment)

SS:堆栈段(Stack Segment)

FS:附加段

GS 附加段

3指令寄存器

EIP(Instrcution Pointer):指令指针存储寄存器,它用来存放代码中偏移地址

4.其他16个标志位(图3)

(图3)

CF(Carry Flag):符号标志,记录运算结果的符号,结果为负数时则 1,否则0

PF(Party Flag):奇偶标志,用来为机器中传送信息时可能产生的代码出错情况听歌检验条件。当结果操作数中1的个数为

偶数时置1,否则置0

AF(Assistant Flag):辅助进位标志位

ZF(Zero Flag):零标志,运算结果为0时ZF位置1,否则置0

SF(Singal Flag):符号标志,记录运算结果的符号,结果为负时置1,否则置0

IF(Interrupt Flag):中断允许标志位,由 CLI,STI两条指令来控制 DF(Direction Flag):向量标志位,由 CLD,STD 两条指令来控制

OF(Overflow Flag):溢出标志,在操作数超出了计算能表示的范围称为溢出

天草学员:anangel 2009.10..16

汇编基础知识②

天草软件安全培训学员:anangel

8086处理器寻址方式

1. 立即寻址(Immediate Addressing)图(1)

这种寻址方式下,操作数以常量的形式出现在指令中举例:01.MOV CX,9;立即数9作为原操作数寄给寄存器ECX。

02.MOV AX,5807H 指令执行后EAX=5870H

图(1)

2.存储器寻址

2-1直接寻址(Direct Addressing)(图2)

格式:(1)[常量] (2)变量

直接寻址是最简单的存储寻址。这种寻址方式下,操作数的有效地址由指令直接给出,是带有方括号的常量或是变量。操作数的段地址默认为在数据段寄存器DS中,即DS为默认段寄存器

(图2)

2-2寄存器间接寻址(Register Indirect Addressing)(图3)

格式:[BX,BP,SI,DI]

操作数的有效地址EA由寄存器 BX BP SI DI给出。在80386下8个寄存器都可以给出

如果指令使用是 BX SI DI则操作数据段中,且用数据寄存器DS中内容为段地址。

如果指令使用是 BP 则操作数据段中,且用数据寄存器SS中内容为段地址。

举例:01.MOV AL,[BX];设BX的内容为1000H则指令功能是将DS段1000H单元内容传送到AL中

(图3)

2-3寄存器相对寻址(Register Relative Addressing) (图4)

即在寄存器间址寻址方式的基础上再加一个位移量,位移量可以是8位也可以是 16 位,比如说 MOV AX,[ax+10]。

(图4)

2-4基址变址寻址(Based Indexed Addressing)(图5)

格式:偏移量[BX或BP+SI或DI]

其中偏移量可以是常量也可以是变量,将基址寄存器成基址+变址寄存器 在 80386 下除 ESP 外的其它 7 个通用寄存器都可以作为变址寄存器

EA= ⎩⎨⎧(BP)(BX)+ ⎩

⎨⎧(DI))SI ( +偏移量

基址是BX 短寄存器使用DS 基址是BP 短寄存器是SS

PA=16*(DS )+(BX)+⎩

⎨⎧(DI))SI ( +偏移量 PA=16*(SS )+(BP)+ ⎩⎨⎧(DI)

)SI ( +偏移量 例子:01 MOV AX ,3000H[BX+SI]

设(DS )=10000H ,(BX )=0400H,(SI )=1260H

则EA=3000H+0400H+1260H==4660H

则PA=10000H+4660H=14660H

(图5)

2-5相对基址变址寻址(Relative based indexed addressing) (图6) 在基址变址寻址方式的基础上加上一位移量

当基址寄存器为BX 时,使用DS 为段寄存器;而当基址寄存器为BP 时,则使用SS 为段寄存器。 举例:01MOV BH,ES:[EBX+EDI+900H];8 位操作,段寄存器是 ES 。

02MOV DL,[EBP+ESI+1900H];8 位操作,段寄存是 SS ,因为用了 EBP 作为基址寄存器。

(图6)

80386知识

在保护模式下,80386 处理器可以使用所有的物理内存。段基址可以是 32 位,也可以不 是 16 的倍数,同时它的最大长度为 4G ,这与 8086 完全不同,在形成逻辑地址时用段基址 直接加上段内偏移地址, 而并不将段基址左移 4 位(乘以16)。 通常情况下, 除了访问堆栈外,默认的段都为 DS ,有跨段前缀就另当别论了。在以 BP ,EBP ,ESP 作为基址寄存器时,这时默认的段寄存器应该是SS ,举几个简单的例子:

MOV EAX,[SI];这里的段寄存器是DS

MOV EAX,FS:[ESI];这里的段寄存器是 FS ,因为指令中使用跨段前缀显示指定了

相关文档
最新文档