当写入寄存器时,比如mov ax, 1
,它会覆盖它之前可能具有的值。
现在我想知道我可以将多大的数字/字符串输入寄存器,而另一个应用程序可以覆盖我的应用程序的寄存器值?我的意思是,进程之间共享寄存器还是接收自己的沙盒/虚拟寄存器?
我对Intel x86(-64)核心CPU和Windows感兴趣。
答案 0 :(得分:2)
一个核心上一次只安排一个线程。核心是寄存器。
当调度新线程时,首先保存寄存器,并恢复先前保存的线程寄存器。这包括程序计数器寄存器,它指向下一条要执行的指令。
注册(来自内存):
AX,BX,CX,DX为16位,分为字节(AH,AL,BH,BL) SI,DI,SP和BP也是16位
EAX,EBX,ECX等是32位
我不确定他们在64位系统上调用了什么。我想我看过RAX,但我不确定。
还有专用寄存器,浮点寄存器等。
答案 1 :(得分:2)
1)寄存器的大小(以明确定义的方式)取决于您使用的名称。例如,eax
是32位宽,ax
是16位,ah
/ al
是8位。如果您使用的是64位系统,则rax
为64位宽。
这些寄存器大小的确切限制在某种程度上取决于您如何解释这些值(特别是,您是将它们视为有符号还是无符号)。不过,这个规模在根本上是重要的。
2)操作系统内核将保存进程的寄存器,而其他进程或内核正在运行。当你没有运行时,寄存器会占用其他值,但它们都是透明的 - 当你的进程正在运行时,寄存器不会从你下面改变。