2009-09-15 21 views
5

stavo cercando online attraverso campioni di domande dell'intervista chiesto in passato da parte di Microsoft e sono imbattuto in questo:Domanda intervista Microsoft ASM?

Il seguente blocco asm svolge una funzione comune la matematica, che cos'è?

cwd xor ax, dx 
sub ax, dx 

Può qualcuno si prega di rispondere a questa e spiegare la risposta a me? Grazie!!

Aggiornamento: ok, quindi calcola il valore assoluto. Qualcuno può spiegare passo dopo passo come funziona? Cioè spiega cosa viene messo in quale registro in ogni istruzione e l'operazione di alu che viene eseguita su quali registri ecc. Grazie!

+0

le persone chiedono domande asm nelle interviste? –

+1

Ho appena letto una domanda in cui la domanda di SM in passato è andata così: l'intervista mette una penna nera davanti a te e non dice altro che "questa è una penna rossa" ... quindi non metterei nulla oltre Microsoft –

risposta

1

Finds valore assoluto

Non funziona solo su AX/EAX - Distrugge un registro (DX/EDX) - Può essere fatto più velocemente su Pentium e processori più recenti Il problema è l'istruzione CWD . Per sostituire CWD, è possibile utilizzare questa combinazione: mov dx, ax sar dx, 15 (Se si utilizzano registri a 32 bit, spostare invece il valore 31.)

cwd- converti la parola in doppia parola.

xor ax, dx => ax = ax xor dx

+0

grazie ... ti piacerebbe approfondire come in effetti questo trovi il valore assoluto? cioè mostrando cosa le istruzioni fanno passo dopo passo (beh forse solo la prima istruzione da quando ho capito il secondo) –

+10

Amico, è ASSEMBLATORE. È step-by-step. – Bombe

4

È la funzione (di ax) abs.

Se ax è positivo, allora dx diventa 0 e nulla cambia.

Se ax è negativo, dx sarà 0xffff, che si traduce in ax~ax - (-1), che è il metodo ben noto per calcolare neg in una rappresentazione complemento a due.

7

cwd xor ax, dx

parola Converti in AX a doppia parola in DX: AX. Il segno è conservato, il valore è preservato. Quindi se AX> = 0, DX = 0 e se AX < 0, DX = -1.

XOR non fa nulla se AX == 0.

Se AX < 0, lo XOR inverte tutti i bit di AX. Quindi il SUB aggiunge 1 (o sottrae -1, qualunque sia: P) a AX. Questo è il modo per calcolare il complemento a 2 di un numero binario.

Tutto sommato, quella sequenza di istruzioni pone il valore assoluto di AX in AX e imposta DX in base al segno.