2009-09-15 15 views
5

Szukałem w internecie za pośrednictwem próbek zadawanych pytań do wywiadu w przeszłości przez Microsoft i natknąłem się na ten jeden:Pytanie o wyrobienie Microsoft ASM?

Poniższy blok ASM realizuje funkcję wspólny matematyki, co to jest?

cwd xor ax, dx 
sub ax, dx 

Może ktoś proszę odpowiedzieć na to pytanie i wyjaśnić odpowiedź do mnie? Dzięki!!

Aktualizacja: ok, więc oblicza bezwzględną wartość. Czy ktoś może wyjaśnić krok po kroku, jak to robi? To znaczy. wyjaśnij, co się dzieje, w którym rejestrze w każdej instrukcji i operacji alu, która jest wykonywana, które rejestry itp. .. Dzięki!

+0

ludzie zadają pytania w wywiadach? –

+1

Właśnie przeczytałem, że pytanie z pytaniem MS w przeszłości brzmiało tak: wywiad stawia przed tobą czarny długopis i nic nie mówi, tylko "to jest czerwony długopis" ... więc nie wstawiłbym niczego poza microsoft –

Odpowiedz

1

Znajduje wartość bezwzględna

To działa tylko na AX/EAX - Niszczy rejestr (DX/EDX) - można to zrobić szybciej na Pentium i nowszych procesorów Problemem jest instrukcja CWD . Aby zastąpić CWD, możesz użyć tej kombinacji: mov dx, ax sar dx, 15 (Jeśli używane są rejestry 32-bitowe, zamiast tego zmień wartość na 31).

cwd - zamień słowo na podwójne słowo.

XOR AX dx => ax = ax XOR dx

+0

dzięki. Czy mógłbyś wyjaśnić, jak w rzeczywistości jest to absolutna wartość? tzn. pokazując, co instrukcje robią krok po kroku (no może pierwsza instrukcja, ponieważ rozumiem drugą) –

+10

Stary, to ASSEMBLER. Jest to krok po kroku. – Bombe

4

To działanie (z ax) abs.

Jeśli ax jest dodatnie, to dx stanie się 0 i nic się nie zmieni.

Jeśli ax negatywnej dx będzie 0xffff, co powoduje ax~ax - (-1), która jest dobrze znaną metodą obliczania neg w przedstawieniu dwójki-dopełniacza.

7

cwd xor ax, dx

Konwersja słowo w AX do podwójnego słowa w DX: AX. Znak zostanie zachowany, wartość zostanie zachowana. Więc jeśli AX> = 0, DX = 0 i jeśli AX < 0, DX = -1.

XOR nie robi nic, jeśli AX == 0.

Jeśli AX < 0, XOR odwraca wszystkie bity AX. Następnie SUB dodaje 1 (lub odejmuje -1, cokolwiek: P) do AX. W ten sposób obliczamy dwójkę uzupełnienia liczby binarnej.

W sumie ta sekwencja instrukcji umieszcza bezwzględną wartość AX na AX i ustawia DX zgodnie ze znakiem.