Asembler funkcja test (8086)

0

Witam!

Jak dokładnie działa funkcja TEST w asemblerze 8086?

Mam taki króciutki fragment kodu:

test    ax,000Ch
                jnz     ram_64
                test    ax,0008h
                jnz     ram_32

w ax siedzi obecnie 16 bitowa wartosc, informujaca o obecnosci badz braku komponentów komputera (np. koprocesora, liczby pamieci ram itd.)

Na bitach 1010001011011100 mieści się informacja dot. pamięci RAM.

00 - blad odczytu
01 - 16 kb RAM
10 - 32 kb RAM
11 - 64+kb RAM

i tak pogrubione bity tworzą razem wartość 12, z ktorą jest w pierwszej lini zamieszczonego kodu porównywany akumulator.
funkcja test sprawdza, czy ta para bitów tworzy razem tą dwunastke, ale dzieje się to dla mnie na niezrozumiałej zasadzie - bowiem moim zdaniem porównując 12 z obecnoscia obu tych bitów powinna sie zapalić flaga zera (no bo porownanie dziala na zasadzie odejmowania arytmetycznego), a dzieje sie zupelnie na odwrót.. Dlaczego?

2

no bo porownanie dziala na zasadzie odejmowania arytmetycznego

RLY?
https://en.wikipedia.org/wiki/TEST_(x86_instruction)

In the x86 assembly language, the TEST instruction performs a bitwise AND on two operands. The flags SF, ZF, PF are modified while the result of the AND is discarded. The OF and CF flags are set to 0, while AF flag is undefined.

http://www.intel.com/Assets/en_US/PDF/manual/253667.pdf strona 453 i dalej jak potrzebujesz więcej szczegółów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1