🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
6 messages
6 total messages Started by Johnny Fri, 21 Jul 2006 07:47
Stos i byte
#412
Author: Johnny
Date: Fri, 21 Jul 2006 07:47
8 lines
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
#413
Author: Michał Walenciak
Date: Fri, 21 Jul 2006 08:23
22 lines
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
#414
Author: Johnny
Date: Fri, 21 Jul 2006 11:27
18 lines
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
#417
Author: Bogdan (bogdro)
Date: Fri, 21 Jul 2006 13:34
17 lines
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
#415
Author: Bogdan (bogdro)
Date: Fri, 21 Jul 2006 13:40
49 lines
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
#416
Author: Andrzej Grażyński
Date: Thu, 14 Sep 2006 22:21
38 lines
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