Com saps la mida d'una CPU?

Per exemple, imagino que estava construint una màquina virtual. Tinc una matriu de bytes i un bucle de temps, com sé quants bytes llegir de la matriu de bytes per a la següent instrucció per interpretar una instrucció d'Intel- 8086?

La CPU llegeix el codi d' articles en el punter d' instruccions, amb 8086 i CISC teniu una ordre de bytes i dos bytes. Com sé si la següent instrucció és F o FF?

El codi d' operació, o codi d' articles, ve després de qualsevol prefix opcional. El codi d'opi diu al processador que instrucció a executar. A més, els codis d' articles contenen camps bits que descriuen la mida i tipus d' operands a esperar. Les instruccions NO, per exemple, tenen l'opdecode 11111w. En aquest codi d' articles, el w bit determina si l' operand és un byte o una paraula. Les instruccions OR tenen l'ocodi d'opinió 000010dw. En aquest codi d' articles, el bit determina quins operands són el codi font i destí, i el w bit determina la mida una altra vegada. Algunes instruccions tenen diferents codis d'operacions. Per exemple, quan s' usa OR amb la caixa de registre d' acumulador (AX o EAX) i una constant, té el codi d'estalvi especial de l' espai, que elimina la necessitat d' un byte ModR/M separats. Des d'una perspectiva de mida, la memorització exacta de bits no és necessària. Tenir una idea general de quin tipus d'opcodis estan disponibles per a una instrucció en particular és més important.

2 respostes 2

El cpu simplement descodifica les instruccions. En el cas de 8086 el primer byte diu al processador quant més s'ha d'aconseguir. No ha de ser el primer byte que el primer byte ha d' indicar d' alguna manera que necessiteu obtenir més, això pot indicar fins i tot més. Amb 8 petites instruccions s' arrangen com la família x86 on comenceu amb un byte i després veureu quant més necessiteu, i també estar desinfrautilitzat, heu de tractar el flux d' instruccions com una cadena de bytes per a descodificar- lo.

Hauríeu d'escriure un simulador d' instruccions molt simples, només un grapat d' instruccions, potser suficient per carregar un registre, afegir-hi alguna cosa i després repetir. Una educació extremadament educativa pel que intentes entendre, i pren potser mitja hora si s'ha d'escriure.

Es tracta del context, per això desassemblador com IDA té algoritmes complexos per fer això.

Les instruccions són longitud variable per a x86. Però si sabeu el començament d'una instrucció, sabeu on acaba INSABES. A causa d'això, pot ser que sàpigues on comença la següent. Aviat explicaré les excepcions. Però primer, aquí teniu un exemple:

ASM:
mov eax, 0
xor etax, etax
Màquina:
b8 00 00 00 00
31 c0

moure' s a l' etax és B8 , seguit per un valor de 32 bits (4-byte) per a moure' s a ex (com a eax és 32 bits). En altres paraules, mov eax, immediat Sempre seran 5 bytes. Si sabeu que esteu començant en una instrucció (no sempre és una suposició segura), i el byte és B8 , sabeu que és una instrucció de 5 bytes, i que la següent instrucció ha de començar 5 bytes més tard.

Tingueu en compte que les dues instruccions ( mov eax, 0 i xor etax, etax ) fa el mateix, eaxa clara a 0.

Les coses poden ser complicades amb els salts i les trucades. És possible saltar en un espai d' adreces que està en el "al mig d'una instrucció" ... però encara executa. Description of a tips

Anem a veure:

mov exax, 0x90909090

Codi de màquina:

b8 90 90 90

Si haguéssim tingut una instrucció jmp que va saltar a l'adreça del 3r byte de les instruccions de dalt (en algun lloc), només faria 3 NOP (sense operació) i cau a la següent instrucció després d' això (sense establir l' ex909090). Això és perquè a NOP és una instrucció 1-byte feta de 0x90.

Artículos Relacionados:

- Processador -

Esta web usa cookies, puedes ver la política de cookies, aquí -
Política de cookies +