Thread View: pl.comp.lang.asm
2 messages
2 total messages
Started by Coristo
Thu, 28 Feb 2008 14:20
Operator PTR
Author: Coristo
Date: Thu, 28 Feb 2008 14:20
Date: Thu, 28 Feb 2008 14:20
9 lines
1033 bytes
1033 bytes
Witam, mam oto takie przypisanie: mov bx, 0200h mov bx, word ptr b ; gdzie b = 000Ah, zadeklarowane jako zmienna byte i otoz w debuggerze po drugiej operacji przypisania rejestr bx wynosi 050Ah. Nie rozumiem tego zachowania. Przeciez przypisuje do BX wartosc 0Ah wiec powinno tam byc 000Ah. Dlaczego operator ten dodaje jakies smieci?
Re: Operator PTR
Author: Bogdan (bogdro)
Date: Thu, 28 Feb 2008 16:52
Date: Thu, 28 Feb 2008 16:52
42 lines
2536 bytes
2536 bytes
Coristo pisze:
> Witam,
> mam oto takie przypisanie:
>
> mov bx, 0200h
> mov bx, word ptr b ; gdzie b = 000Ah, zadeklarowane jako zmienna byte
>
> i otoz w debuggerze po drugiej operacji przypisania rejestr bx wynosi
> 050Ah. Nie rozumiem tego zachowania. Przeciez przypisuje do BX wartosc
> 0Ah wiec powinno tam byc 000Ah. Dlaczego operator ten dodaje jakies smieci?
Witam.
Odpowiedź kryje się w pytaniu. Sam piszesz: "gdzie b = 000Ah,
zadeklarowane jako zmienna byte". W szczególności słowo "BYTE" ma
znaczenie. Instrukcja MOV BX ładuje 2 bajty z pamięci - nie ważne, czy
zadeklarowałeś zmienną przez DB, DW, DD czy jeszcze co innego. Do
niższej części BX ładowany jest młodszy bajt, czyli wartość zmiennej
"b" (0Ah), a do starszej - cokolwiek, co było w następnym bajcie
pamięci - w tym przypadku wartość 5.
Kompilator jakiś MASM/TASM, jak widzę. Ostrzegłby Cię o
nieprawidłowym rozmiarze zmiennej, gdybyś nie rzutował jej na inny typ
niż jest, poprzez "word ptr". Na szczęście kompilator nie rozszerza
automatycznie zmiennych do właściwego rozmiaru.
Jeśli chcesz wpisać wartość zmiennej do większego rejestru niż ona
sama, masz parę możliwości:
movzx bx, [b] ; rozszerza zmienną bez znaku
movsx bx, [b] ; rozszerza zmienną ze znakiem
mov bl, [b]
xor bh, bh ; BH := 0
xor bx, bx
mov bl, [b]
--
Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads