🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
2 messages
2 total messages Started by Coristo Thu, 28 Feb 2008 14:20
Operator PTR
#1706
Author: Coristo
Date: Thu, 28 Feb 2008 14:20
9 lines
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
#1707
Author: Bogdan (bogdro)
Date: Thu, 28 Feb 2008 16:52
42 lines
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