cs和ip寄存器

411 阅读2分钟

寄存器用于存放物理地址

CPU执行指令的三个步骤
  1. 读取cs:ip所指向地址的指令,读取的指令进入缓冲器
  2. ip=ip+所读取指令长度,从而指向下一条指令
  3. 执行指令,重复第一步
CS寄存器和IP寄存器

CS寄存器: code segment, 代码段寄存器,存放代码段的内存单元地址(基地址)。 IP寄存器: instruction pointer,指令指针寄存器,存放指令所在的地址的偏移地址

举例:希望执行1000:0123地址的指令时,先修改cs和ip寄存器值
jmp 1000:0123 #同时修改cs和ip, 即执行后cs=1000,ip=0123
jmp ax #修改ip为ax,可类比mov ip,ax

命名规则

r表示register, x64系统新增8个通用寄存器(r8~r15)
e表示extended,扩展(16bit->32bit)
x表示占位符, 可以是H或者L,分别表示高8位和低8位,x86大佬原始邮件解释如下
"The X was simply an arbitrary letter that combined both L and H – sort of like the use of X in algebra to designate the unknown."

ax: accumulator register --> eax为32bit寄存器, rax为64bit寄存器
bx: base register --> ebx -->rbx
cx: count register --> ecx -->rcx
dx: data register -->edx -->rdx
sp: stack pointer --> esp -->rsp
bp: base pointer --> ebp -->rbp
si: souce index -->esi -->rsi
di: destination index -->edi -->rdi

举例分析

设置初始状态:CS = 2000H, IP = 0000H

汇编.jpg

指令执行过程:

指令CS:IP结果
mov ax,66222000:0003ax=6622
jmp 1000:32000:0008cs:ip=1000:0003
mov ax,00001000:0006ax=0000
mov bx,ax1000:0008bx=0000
jmp bx1000:000Acs:ip=1000:0000
mov ax,01231000:0003ax=0123
==>继续转第三行执行