x86汇编--(一)寄存器功能、寻址方式、伪指令总结

; 看视频的初学汇编的不算小结的小结,容易忘(主要在masm中)

AX:    普通功能寄存器
BX:    普通功能寄存器
          [BX]:    masm编译器中用于 代替debug中内存的偏移地址

DS:    内存基地址
[BX]:   偏移地址  或者使用 ds:[偏移地址] 来表示
CX:    普通功能寄存器
          设置loop循环的次数
CS:    程序执行基地址
IP:     程序执行的偏移地址
SS:    栈指针的基地址
SP:    栈指针的偏移地址, 一般来说对SP只进行mov操作,进行其他操作是非法的,会产生奇怪的错误
--------------------------------------------------------------------------------------------------------
ES:  和DS一样也可以存一个基地址 (好神奇,在程序中要把一段内存的内容放到另外一段去的时候可以通过这个进行一定的优化啊)
SI、DI和BX的功能基本差不多,唯一不同的是他们不能像BX一样分成BL和BH两个部分
BP在没有指定段地址时与SP一样的,指定段地址ds则表示与ds:[bx]是一样的意义
注:SP+BP、DI+SI是不允许的

伪指令
db:一个字节,8位
dw:一个字,16位
dd:两个字,32位
db+dup:db 3 dup(‘acg‘,’ACG’) 相当于 'acgACGacgACGacgACG'

寻址方式:
1.立即寻址
例如:mov ax,0  对应一个机器码,存放在指令缓冲寄存器中,汇编指令中直接给出。
2.寄存器直接寻址
例如:ds:[0]、es:[0] 据逆向里面说凡是这个寻址方式都要进行重定位
3.寄存器间接寻址
例如:[bx+idata]
4.寄存器变址寻址
例如:[bx+si]
5.相对基址变址寻址
例如:[bx+si+idata]

在上面的寻址方式中,一般用bx定义整个结构体,用idata定义某个数据项,用si定位数据项的具体的一个字(节)或者说是元素。在反汇编中十分有用

你可能感兴趣的:(汇编,汇编,x86)