欢迎光临
箫启灵个人站点

[汇编基础] 常见汇编指令,内存操作

常见汇编指令

1、 MOV指令

指令格式: 

1、MOV r/m8,r8  r 通用寄存器

2、MOV r/m16,r16  m 代表内存

3、MOV r/m32,r32  imm 代表立即数

4、MOV r8,r/m8  r8 代表8位通用寄存器

5、MOV r16,r/m16  m6 代表16位内存

6、MOV r32,r/m32  imm8 代表8位立即数

7、MOV r8, imm8

8、MOV r16, imm16

9、MOV r32, imm32

2、 ADD指令  加法 A=A+B

指令格式: 

ADD r/m8, imm8

ADD r/m16,imm16

ADD r/m32,imm32

ADD r/m16, imm8

ADD r/m32, imm8

ADD r/m8, r8

ADD r/m16, r16

ADD r/m32, r32

ADD r8, r/m8

ADD r16, r/m16

ADD r32, r/m32 

3、 SUB指令 减法   A = A-B

指令格式: 

SUB r/m8, imm8

SUB r/m16,imm16

SUB r/m32,imm32

SUB r/m16, imm8

SUB r/m32, imm8

SUB r/m8, r8

SUB r/m16, r16

SUB r/m32, r32

SUB r8, r/m8

SUB r16, r/m16

SUB r32, r/m32 

4、 AND指令        A = A & B

AND r/m8, imm8

AND r/m16,imm16

AND r/m32,imm32

AND r/m16, imm8

AND r/m32, imm8

AND r/m8, r8

AND r/m16, r16

AND r/m32, r32

AND r8, r/m8

AND r16, r/m16

AND r32, r/m32 

5、 OR指令                 A=A | B   

OR r/m8, imm8

OR r/m16,imm16

OR r/m32,imm32

OR r/m16, imm8

OR r/m32, imm8

OR r/m8, r8

OR r/m16, r16

OR r/m32, r32

OR r8, r/m8

OR r16, r/m16

OR r32, r/m32 

6、 XOR指令            A

XOR r/m8, imm8

XOR r/m16,imm16

XOR r/m32,imm32

XOR r/m16, imm8

XOR r/m32, imm8

XOR r/m8, r8

XOR r/m16, r16

XOR r/m32, r32

XOR r8, r/m8

XOR r16, r/m16

XOR r32, r/m32 

7、 NOT指令 非

NOT r/m8

NOT r/m16

NOT r/m32 

——————————————————————————–

内存复制指令

——————————————————————————–

有关联的寄存器:

变址和指针寄存器(ESI和EDI)

标志寄存器(EFlags)32位

1、 MOVS指令:移动数据   内存-内存   从esi地址编号的内存复制到edi地址编号的里面去

BYTE/WORD/DWORD 

MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]  简写为:MOVSB

MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI]  简写为:MOVSW

MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]  简写为:MOVSD

注释:

movs指令执行后,EDI跟ESI会自动改变值,值的多少跟你数据宽度和DF位方向有关  byte +1 word+2 dword+4

movsb 每次+1

movsw 每次+2

movsd 每次+4

EFl拆成2进制后,从低位到高位,第10位叫DF位。方向位

如果DF位0 

movs指令是+

如果DF位为1

movs指令是-


EFl浅解:

OF overflow flag 溢出标志 操作数超出机器能表示的范围表示溢出,溢出时为1.

SF sign Flag 符号标志 记录运算结果的符号,结果负时为1.

ZF zero flag 零标志 运算结果等于0时为1,否则为0.

CF carry flag 进位标志 最高有效位产生进位时为1,否则为0.

AF auxiliary carry flag 辅助进位标志 运算时,第3位向第4位产生进位时为1,否则为0.

PF parity flag 奇偶标志 运算结果操作数位为1的个数为偶数个时为1,否则为0.

DF direcion flag 方向标志 用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大.

IF interrupt flag 中断标志 IF=1时,允许CPU响应可屏蔽中断,否则关闭中断.

TF trap flag 陷阱标志 用于调试单步操作.

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

STOS BYTE PTR ES:[EDI] 简写为STOSB       把al值放到指定内存地址

STOS WORD PTR ES:[EDI] 简写为STOSW    把ax的值放到指定地址

STOS DWORD PTR ES:[EDI] 简写为STOSD  把eax的值放入指定地址

MOV EAX,12345678 观察EDI的值 

MOV EDI,12FFC4 

STOS BYTE PTR ES:[EDI] 

STOS WORD PTR ES:[EDI] 

STOS DWORD PTR ES:[EDI]

修改标志寄存器中D位的值,然后在执行下面的指令: 

MOV EAX,12345678 

MOV EDI,12FFC4 

STOS BYTE PTR ES:[EDI] 观察EDI的值 

STOS WORD PTR ES:[EDI] 

STOS DWORD PTR ES:[EDI] 

注释:stos指令执行后,EDI会自动改变值,值的多少跟你数据宽度和DF位方向有关

3、REP指令:按计数寄存器(ECX)中指定的次数重复执行字符串指令 (依赖ecx)

ECX计数器

MOV ECX,10

REP MOVSD   执行完后,会改动的指令 esi  edi  ,ecx会变成0

REP STOSD    执行完后,会改动的指令  edi, ecx会变成0

用户空间         系统空间

0-7FFFFFFF , 80000000-FFFFFFFF

系统的地址是从哪里开始啊

内核空间的地址80000000——FFFFFFFF  高2G

用户空间是(应用程序) 0——7FFFFFFF                     低2G

std cld  操作df位  

std df位 1 

sld df位 0

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

刺蝴蝶De箫启灵

作死购站点VIP视频站站点