Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[asm] Przesłanie rejestru 1B do rejestru 4B

# 16 Cze 2011 11:59 1098 3
  • #1 16 Cze 2011 11:59
    #
    Poziom 13  

    Witam!
    Przygotowuję się do egzaminu z architektury komputerów i mam pytanko do zadania. Podają w nim kod

    Kod: asm
    Zaloguj się, aby zobaczyć kod

    i mówią żeby zapisać tak żeby działało. Bh jest częścią EBX więc można zamaskować ebx i przesłać do edi z tym że nie mam pojęcia dlaczego kod podany w zadaniu nie działa. Wytłumaczycie?

    0 3
  • Pomocny post
    #3 16 Cze 2011 20:18
    Akane
    Poziom 27  

    Użyj MOVZX (zero extend) lub MOVSX (sign extend) do kopiowania "mniejszego" rejestru do "większego". MoxZx wyzeruje cały docelowy rejestr i skopiuje do odpowiedniej jego części rejestr źródłowy, a movSx potraktuje rejestr źródłowy jako liczbę ze znakiem, rozszerzając bit znaku na wszystkie wolne bity rejestru docelowego (tutaj na trzy bajty).

    Kod: asm
    Zaloguj się, aby zobaczyć kod

    Gdy zawartość rejestru bh traktujesz jako liczbę bez znaku i jest nią np. 255, to edi przyjmie wartość 255.

    Natomiast gdy zawartość rejestru bh traktujesz jako liczbę ze znakiem i chcesz by edi też takie było, to użyj rozkazu movsx, wtedy rozkaz movsx dla bh=255 (czyli -1) wpisze liczbę -1 (0xFFFFFFFF) do edi.
    0x000000FF będzie kopią rejestru bh, a reszta 0xFFFFFF00 będzie wypełniona najstarszym bitem rejestru bh.

    0
  • #4 11 Wrz 2011 12:36
    #
    Poziom 13  

    Dzięki bardzo Akane. Dodam jeszcze że PTR można używać tylko do przesyłania do rejestru liczby 'z ręki' lub zmiennej.

    0