NASM汇编
NASM汇编
解释chapter3/a/pmtest1.asm中的汇编代码
常用寄存器的作用
通用寄存器 | 用途 | 常用于 |
---|---|---|
eax | 累加器 | 常用于乘、除法和函数返回值 |
ebx | 基址(Base)寄存器 | 常做内存数据的指针, 或者说常以它为基址来访问内存. |
ecx | 计数器(Counter)寄存器 | 常做字符串和循环操作中的计数器 |
edx | 数据(Data)寄存器 | 常用于乘、除法和 I/O 指针 |
esi | 来源索引(Source Index)寄存器 | 常做内存数据指针和源字符串指针 |
edi | 目的索引(Destination Index)寄存器 | 常做内存数据指针和目的字符串指针 |
esp | 堆栈指针(Stack Point)寄存器 | 只做堆栈的栈顶指针; 不能用于算术运算与数据传送 |
ebp | 基址指针(Base Point)寄存器 | 只做堆栈指针, 可以访问堆栈内任意地址, 经常用于中转 ESP 中的数据, 也常以它为基址来访问堆栈; 不能用于算术运算与数据传送 |
指令指针寄存器 | 用途 | 常用于 |
---|---|---|
eip | 指令指针寄存器 | 总是指向下一条指令的地址; 所有已执行的指令都被它指向过. |
段寄存器 | 常用于 |
---|---|
ECS | 其值为代码段的段值 |
EES | 其值为附加数据段的段值 |
ESS | 其值为堆栈段的段值 |
EFS | 其值为附加数据段的段值 |
EGS | 其值为附加数据段的段值 |
linux二进制查看命令
xxd -b filename
xxd filename
eax,ax,ah,al的区别
这几个寄存器是整体于部分的关系,eax是32位,ax是eax中的低16位,ah是ax中的高8位,al是ax中的低8位
基本命令
move指令
mov ax,cs ;cs寄存器的值赋给ax
mov ds,ax ;ax的值赋給ds
mov es,ax ;ax的值赋給es
mov ss,ax ;ax的值赋給ss
mov sp,0100h ;把sp的值赋成0100h
xor指令
xor eax,eax ;这句话的作用是eax与eax异或操作其再赋值给eax其实意思就是把eax的值设为0
move ax,ds
为何这里不直接用move操作进行赋值:因为move指令比较长,而异或指令比较短
shl指令
shl eax,4 ;eax左移4位
add指令
add eax,LABEL_GDT ;eax位eax+gdt基地址
mov dword[GdtPtr+2],eax ;
dword 表示移动双字也就是32位
cli指令
cli ;关中断