Domanda

Vedo codice come:

mov ax, cs
mov ds, ax
mov es, ax

Perché non posso semplicemente comprimere questo:

mov ds, cs
mov es, cs

è il primo modo più veloce sin dal suo utilizzo registro accumulatore? Ma questo non sembrerebbe intuitivo, dato cs e DS sono segmento registri . O c'è qualche limitazione che io sono a conoscenza di?

sto usando nasm per la via.

È stato utile?

Soluzione

Non è possibile segmentare mov registrati per registro di segmento -. Non c'è nessuna istruzione per esso

Altri suggerimenti

C'è solo così tanto spazio in un processore per il microcodice per tutti i suoi istruzioni. Così un'istruzione generale è spesso preferito su più quelli per uso speciale per raramente uused registri di segmento operazioni lago mutevoli. Inoltre, per alcuni processori il numero di istruzioni è assolutamente limitata dall'architettura -. Per esempio, il processore originale 8080 è stato di 256 istruzioni come tutti dovevano avere il codice op codificato in un singolo byte

Non è il linguaggio assembly davvero ma il linguaggio sottostante macchina che impedisce a queste operazioni.

Durante il montaggio si compone di facile lettura parole o mnemonica, in realtà rappresentano piuttosto direttamente gli 1 e 0 del codice macchina. Su CPU x86 ciascuna istruzione è tipicamente costituito da una sequenza di byte con singoli byte o anche bit all'interno dei byte aventi significato. Alcuni bit rappresentano l'istruzione, altri rappresentano il modalità di indirizzamento . In modalità indirizzamento registro come tuoi esempi alcuni bit rappresentano che registri specifici devono essere utilizzati come fonte e destinazione dell'istruzione mov.

Ora la famiglia di processori x86 andare molto indietro nel tempo al 1970, quando l'architettura della CPU era più semplice. In quei giorni il concetto di accumulatore era di fondamentale importanza - ax è il 16 accumulatore 86 bit. Tutti i calcoli sono stati costruiti o "accumulate" in questo registro così è stato a disposizione di tutte le istruzioni. Altri registri di uso generale ha avuto una gamma più ristretta di utilizzo.

A causa istruzioni sono basate su byte si voleva da pochi byte per rappresentare un'istruzione possibile per mantenere l'istruzione decodifica veloce. Per mantenere il maggior numero di istruzioni più breve possibile l'uso dell'accumulatore è fatto centrale.

Il più CPU moderne, come il Motorola 680x0 registri di uso più generale hanno più abilità che prima erano dominio dell'accumulatore. Su CPU RISC tutti i registri sono flessibili come accumulatori. Ho sentito dire che in modalità a 64 bit il set corrente x86 / amd64 di istruzioni è ora molto meno limitato.

Guardate la Intel Manuale Volume 2 del set di istruzioni - 325383-056US settembre 2015 " MOV Move" colonna "Istruzione".

L'unico 16 bit MOV ai registri è codificato in:

mov r/m16, Sreg

E "3.1.1.3 Istruzione Colonna nella Tabella riassuntiva Opcode", spiega:

  • r / m16 - Un operando registro di parole di uso generale o la memoria utilizzata per le istruzioni di cui operando-size attributo è 16 bit. I registri parola di uso generale sono:. AX, CX, DX, BX, SP, BP, SI, DI
  • Sreg -. Un registro segmento

Così mov ds, cs non è codificabile, come non esiste una versione mov Sreg, Sreg.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top