windows - Hvordan virker skrivning til CPU-registret faktisk?

Indlæg af Hanne Mølgaard Plasc

Problem



Når du skriver til et register, sig som mov ax, 1, overskriver det den værdi, det måtte have haft tidligere.


Nu hvad jeg spekulerer på er, at hvor mange figurer/strenge kan jeg føje til et register, og det kan en anden applikation overskrive min apps registreringsværdier? Jeg mener, at registre deles mellem processer eller modtager de deres egne sandbox/virtuelle registre ?


Jeg er interessant i Intel x86 (-64) Core CPU'er og Windows.

Bedste reference


Kun en tråd er planlagt ad gangen på en enkelt kerne. Kernen er hvad der har registre.


Når en ny tråd er planlagt, gemmes registre først, og de tidligere gemte registre af tråden gendannes. Dette inkluderer programkontrontegnelsen, som peger på den næste instruktion til at udføre.





Registre (fra hukommelse):


AX, BX, CX, DX er 16 bits, brudt i byte (AH, AL, BH, BL)
SI, DI, SP og BP er også 16 bits


EAX, EBX, ECX osv. Er 32 bits


Jeg er ikke sikker på, hvad de 'kaldes på et 64-bit system. Jeg tror jeg så RAX, men jeg er ikke sikker.


Der er også specielle formål registre, flydende punkt registre mv.

Andre referencer 1


1) Størrelsen af ​​registre afhænger (på veldefinerede måder) på, hvilke navne du bruger til dem. For eksempel er eax 32 bits bredt, ax er 16 bits og ah/al er 8 bit. Hvis du er på et 64-bit system, er rax 64 bit bredt.


De nøjagtige grænser for disse registreringsstørrelser afhænger noget af, hvordan du fortolker værdierne (især om du behandler dem som signeret eller usigneret). Størrelsen er dog fundamentalt vigtigt.


2) Operativsystemkernen gemmer dine procesregistre, mens andre processer eller kernen kører. Registret tager andre værdier, mens du ikke kører, men det er helt gennemsigtigt - mens din proces er løb, registre vil ikke skifte ud under dig.