Thread View: pl.comp.lang.asm
6 messages
6 total messages
Started by Johnny
Fri, 21 Jul 2006 07:47
Stos i byte
Author: Johnny
Date: Fri, 21 Jul 2006 07:47
Date: Fri, 21 Jul 2006 07:47
8 lines
1042 bytes
1042 bytes
Czy można na stosie położyć elementy listy "bajtowej". Jest lista wartości typu 1,2,3,4,..., której offset znajduje się w di. Wywołując push [di] na stosie pojawiają się słowa a nie bajty, z kolei wywołanie push byte ptr [di] jest błędne. Pozdrawiam -- Johnny
Re: Stos i byte
Author: Michał Walenciak
Date: Fri, 21 Jul 2006 08:23
Date: Fri, 21 Jul 2006 08:23
22 lines
1435 bytes
1435 bytes
Johnny wrote: > Czy można na stosie położyć elementy listy "bajtowej". Jest lista > wartości typu 1,2,3,4,..., której offset znajduje się w di. Wywołując > push [di] na stosie pojawiają się słowa a nie bajty, z kolei wywołanie > push byte ptr [di] jest błędne. > > Pozdrawiam na stos mozna kłaść tylko słowa lub podwójne słowa (w procesorach 32 bitowych), nie da sie położyć bajtu możesz zrobić cos takiego : mov ah,[di] mov al,[di + 1] push ax -- Kicer, gg: 3729519, kicer na poczta kropka fm - Stirlitz co jest lepsze radio czy gazeta? - zapytał podejrzliwie Müller. - Gazeta, w radio nie zawiniesz śledzia - odparł spokojnie Stirlitz.
Re: Stos i byte
Author: Johnny
Date: Fri, 21 Jul 2006 11:27
Date: Fri, 21 Jul 2006 11:27
18 lines
1274 bytes
1274 bytes
Michał Walenciak napisał(a): > na stos mozna kłaść tylko słowa lub podwójne słowa (w procesorach 32 > bitowych), nie da sie położyć bajtu > > możesz zrobić cos takiego : > mov ah,[di] > mov al,[di + 1] > push ax > Dzięki. W tym przypadku to raczej mov ah,[di] shr ax,4 push ax no bo liczba bytów może być nieparzysta i co wtedy? -- Johnny
Re: Stos i byte
Author: Bogdan (bogdro)
Date: Fri, 21 Jul 2006 13:34
Date: Fri, 21 Jul 2006 13:34
17 lines
1665 bytes
1665 bytes
Johnny napisał(a): > Czy można na stosie położyć elementy listy "bajtowej". Jest lista > wartości typu 1,2,3,4,..., której offset znajduje się w di. Wywołując > push [di] na stosie pojawiają się słowa a nie bajty, z kolei wywołanie > push byte ptr [di] jest błędne. Można, ale nie natychmiast. Trzeba je rozszerzyć, wtedy na stosie będzie istotnie wartość bajtu, ale w rozmiarze słowa/dworda. movzx/sx ax/eax, byte [di] push ax/eax -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Re: Stos i byte
Author: Bogdan (bogdro)
Date: Fri, 21 Jul 2006 13:40
Date: Fri, 21 Jul 2006 13:40
49 lines
2301 bytes
2301 bytes
Johnny napisał(a): > Michał Walenciak napisał(a): >> na stos mozna kłaść tylko słowa lub podwójne słowa (w procesorach 32 >> bitowych), nie da sie położyć bajtu >> >> możesz zrobić cos takiego : >> mov ah,[di] >> mov al,[di + 1] >> push ax >> > Dzięki. > W tym przypadku to raczej > mov ah,[di] > shr ax,4 > push ax > no bo liczba bytów może być nieparzysta i co wtedy? Zależy. Jeśli wkładasz parami, to ostatni bajt moim sposobem (inny post). Tu chciałbym zwrócić uwagę, że po shr ax, 4 w AH masz 4 bity zerowe, 4 bity z jednego z elementów tablicy, a w AL - drugie 4 bity z tego elementu tablicy i 4 bity z innego. A chyba nie o to dokładnie chodziło. Niemniej, napisanie mov ah,[di] shr ax, 8 push ax jest dobre i sprowadza się do MOVZX z mojego postu, tylko jest dłuższe :) Można też oczywiście mov al,[di] and ax, 0ffh push ax oraz mov al,[di] mov/and ah, 0 push ax ale to i tak będą 3 instrukcje. To, który sposób będzie szybszy, zależy od procesora. -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Re: Stos i byte
Author: Andrzej Grażyński
Date: Thu, 14 Sep 2006 22:21
Date: Thu, 14 Sep 2006 22:21
38 lines
1659 bytes
1659 bytes
Michał Walenciak napisał(a): > Johnny wrote: > >> Czy można na stosie położyć elementy listy "bajtowej". Jest lista >> wartości typu 1,2,3,4,..., której offset znajduje się w di. Wywołując >> push [di] na stosie pojawiają się słowa a nie bajty, z kolei wywołanie >> push byte ptr [di] jest błędne. >> >> Pozdrawiam > > na stos mozna kłaść tylko słowa lub podwójne słowa (w procesorach 32 > bitowych), nie da sie położyć bajtu > > możesz zrobić cos takiego : > mov ah,[di] > mov al,[di + 1] > push ax > mov ah, bajt push ax inc sp a w powyższym przypadku: push [di-1] inc sp a z powrotem (bajt ze stosu do al) dec sp pop ax xchg al,ah
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