汇编语言基础1

x86是基于Intel8086处理器的小端(little-endian)体系结构(就是先存储低位的字节)。处理器通常可以运行在两种模式下:实模式和保护模式。实模式是指处理器刚通电后只支持16位指令集的状态。保护模式是指处理器支持虚拟内存,分页以及其他的功能状态,也是运行当代操作系统的状态。
寄存器
寄存器是cpu内部的高速存储单元,访问速度比内存快得多,用来存取程序运行中的各种信息。常用的寄存器分为4类,分别是8个通用寄存器,6个段寄存器,1个标志寄存器和1个指令指针寄存器。
(1)通用寄存器主要用于各种运算和数据的传送,每个寄存器都可以作为一个32位,16位,或8位来使用。分别是数据存取器EAX,EBX,ECX,EDX和指针,变址寄存器EBP,ESP,ESI,EDI.EAX是32位,AX是16位,AL/AH是8位。但是实际上只有数据存储寄存器这么使用。指针变址寄存器可以按照32位或16位进行使用。例ESI寄存器可以存储32位的指针,其低16位SI,存储16位的指针,但无法像AX拆成AL(低8位)和AH(高8位)。
部分通用寄存器的特殊用途:
1,EAX在乘法和除法指令中被自动调用;
2,CPU自动使用ECX作为循环计数器;
3,ESP寻址堆栈上的数据,ESP一般不参加数值运算,通常称为栈指针寄存器;
4,ESI(source 源地址)和EDI(destination 目的地)通常用于内存数据的高速传送,被称为源指针寄存器和目的指针寄存器;
5,EBP由高级语言用来引用参数和局部变量,称为栈桢基址指针寄存器。
(2)指令指针寄存器
指令指针寄存器EIP是一个32位的寄存器。在16位环境中为IP.EIP通常保存着下一条要执行指令的地址。下一条指令的地址为当前指令的地址加当前指令的长度。EIP的值只能通过流程控制指令,比如JMP,JE,RET等来改变。EIP寄存器的读取不能直接用 MOV EAX,EIP。
(3)段寄存器
段寄存器用于存放段的基址,段是一块预分配的内存区域。在16位CPU中有4个段寄存器是CS(代码段),DS(数据段),SS(堆栈段),ES(附加段)。32位下扩展了2个附加的段寄存器FS和GS。
(4)标志寄存器
在16位CPU中,标志寄存器称为FLAGS.在32位CPU中,标志寄存器也扩展为32位,EFLAGS.标志寄存器中每一个标志位只占1位,并且16位的标志寄存器并没有全部使用。16位的标志寄存器分为两部分,条件标志和控制标志。
条件标志位的说明如下:
1,OF(Overflow Flag):溢出标志位,溢出时为1,否则为0;
2,SF(Sign Flag):符号标志,运算结果为负时,为1,否则为0;
3,ZF(Zero Flag):零标志,运算结果为0 时,为1,否则为0。
4,(Auxiliary carry Flag):辅助进位标志,记录运算时第3位(半字节)产生的进位,有进位时为1,否则为0。
5,(Parity Flag):奇偶标志,结果操作数中1的个数为偶数时,为1,否则为0。
6,CF(Carry Flag):进位标志,产生进位时为1,否则为0。
控制标志位说明:
1,DF(Direction Flag):方向标志,在串处理指令中用于方向控制。
2,IF(Iterrupt Flag):中断标志。
3,TF(Trap Flag):陷阱标志。

!!!@@@###$$$%%%^^^&&&***((()))___+++===—
指令 pushfq 对rsp及堆栈内容影响
pushfq 执行前各寄存器内容如下图:
在这里插入图片描述
pushfq 执行后,各寄存器内容如下图:
在这里插入图片描述
经对比可以发现:
pushfq 指令会先将rsp 的值减去8,然后将efl 的值压入栈。

!!!@@@###$$$%%%^^^&&&***((()))___+++===—
call $+5指令对各寄存器及堆栈内容影响
call $+5执行之前,各寄存器如下图:
在这里插入图片描述
call $+5 执行之后,各寄存器如下图:
在这里插入图片描述
对比可以发现:call $+5 执行之后,会先将rsp 值减去8;然后将call $+5指令的下一条指令的地址压入堆栈并将该地址赋给rip。

!!!@@@###$$$%%%^^^&&&***((()))___+++===—
push 指令也是先将rsp的值减去8,然后对应的值压入堆栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值