汇编学习

一. 几个单位


    DATA    字节          8位
    WORD    字           16位
    DWORD    双字     32位

二. 八个通用寄存器

32位  16位 8位    
EAX   AX   AL
ECX   CX   CL
EDX   DX   DL
EBX   BX   BL
ESP   SP   AH
EBP   BP   CH
ESI    SI   DH
EDI    DI   BH

三. 几条汇编指令

mov
add
sub
and
or
xor
not

四. 五种寻址方式 

寻址公式一:[立即数]

寻址公式二:[reg]  reg代表寄存器 可以是8个通用寄存器中的任意一个

寻址公式三:[reg+立即数] 

寻址公式四:[reg+reg*{1,2,4,8}]

寻址公式五:[reg+reg*{1,2,4,8}+立即数] 

五. 栈操作

PUSH指令:后跟存入的数据
POP指令:后跟承接弹出数据的容器
PUSHAD指令:将八个通用寄存器的值存到堆栈
POPAD指令:将值还原到寄存器

六. 标志寄存器

汇编学习

1、进位标志CF(Carry Flag):如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

2、奇偶标志PF(Parity Flag):奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。

3、辅助进位标志AF(Auxiliary Carry Flag):

4、零标志ZF(Zero Flag):零标志ZF用来反映运算结果是否为0。

5、符号标志SF(Sign Flag):符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。

6、溢出标志OF(Overflow Flag):溢出标志OF用于反映有符号数加减运算所得结果是否溢出。

    最高位进位与溢出的区别:

进位标志:表示无符号数运算结果是否超出范围.
溢出标志:表示有符号数运算结果是否超出范围.

    在有符号的运算中,有如下的规律:

1. 正 + 正 = 正 如果结果是负数,则说明有溢出
2. 负 + 负 = 负 如果结果是正数,则说明有溢出
3. 正 + 负 永远都不会有溢出.

1、无符号、有符号都不溢出
2、无符号溢出、有符号不溢出
3、无符号不溢出、有符号溢出
4、无符号、有符号都溢出

 

七. 六条指令

1. ADC(carry)指令:带进位加法
说明:如果CF标志为1,那么在使用adc是就会加一。一般用于低位进位时高位加法使用adc来承接低位进位的1。

2. SBB(borrow)指令:带借位减法
规则同上,CF为1时-1。

3. XCHG指令:交换数据
4. MOVS指令:移动数据  内存-内存

MOV ESI, 地址     如果DF标志为0,ESI正方向增长;为1则负方向增长,增长值由移动的数据宽度决定。
MOV EDI, 地址     如果DF标志为0,EDI正方向增长;为1则负方向增长,增长值由移动的数据宽度决定。

MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
MOVS WORD PTR ES:[EDI],BYTE PTR DS:[ESI]
MOVS DWORD PTR ES:[EDI],BYTE PTR DS:[ESI]

5. STOS指令:将Al/AX/EAX的值存储到[EDI]指定的内存单元

    MOV EAX,12345678
    MOV EDI,12FFC4
    STOS BYTE PTR ES:[EDI]    简写为STOSB

6. REP指令:按计数寄存器 (ECX) 中指定的次数重复执行字符串指令
    MOV ECX,10
    REP MOVSD
    REP STOSD