🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
4 messages
4 total messages Started by Piotr Thu, 14 May 2009 20:31
Prosty programik, ale nie dziala...
#1854
Author: Piotr
Date: Thu, 14 May 2009 20:31
51 lines
695 bytes
Witam! Mam tablice danych .byte. Chce wyswietlic jakis element (np.
pierwszy), tzn. odpowiednik liczby w tablicy ASCII. Dlaczego to nie
dziala? (GNU As)

############################################

SYSEXIT = 1
SYSREAD = 3
SYSWRITE = 4
STDOUT = 1
STDIN = 0
EXIT_SUCCESS = 0

.section .data

data1:
	.byte 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30


.section .text

.globl _start

_start:

mov $0, %edi


mov $SYSWRITE, %eax
mov $STDOUT, %ebx
mov data1(,%edi,1), %ecx    # - chyba ta linijka jest zla...
mov $1, %edx
int $0x80


movl $1, %eax
movl $0, %ebx
int $0x80


###############################

Po prostu nic mi nie wypisuje :(


Prosze o pomoc....


Pozdrawiam
Piotr

Re: Prosty programik, ale nie dziala...
#1855
Author: "Bogdan (bogdro)
Date: Fri, 15 May 2009 17:43
66 lines
1751 bytes
Piotr pisze:
> Witam! Mam tablice danych .byte. Chce wyswietlic jakis element (np.
> pierwszy), tzn. odpowiednik liczby w tablicy ASCII. Dlaczego to nie
> dziala? (GNU As)
>
> ############################################
>
> SYSEXIT = 1
> SYSREAD = 3
> SYSWRITE = 4
> STDOUT = 1
> STDIN = 0
> EXIT_SUCCESS = 0
>
> .section .data
>
> data1:
>     .byte 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30
>
>
> .section .text
>
> .globl _start
>
> _start:
>
> mov $0, %edi
>
>
> mov $SYSWRITE, %eax
> mov $STDOUT, %ebx

> mov data1(,%edi,1), %ecx    # - chyba ta linijka jest zla...

 Tak, raczej tak. Tutaj do %ecx �adujesz zawarto�� kom�rki o numerze
%edi z tablicy "data1". W sk�adni intela, je�li znasz, wygl�da�oby to tak:
	mov	ecx, [data1+edi]
 a tymczasem w ECX ma by� wska�nik do bufora z danymi (innymi s�owy -
adres bufora z danymi). Mo�na to osiagn�� na co najmniej dwa sposoby:

1. U�y� LEA zamiast MOV:

	lea data1(,%edi,1), %ecx

  Ta instrukcja za�aduje do %ecx adres pierwszego argumentu
instrukcji, czyli adres zmiennej o adresie "data1(,%edi,1)".

2. Wpisa� adres bezpo�rednio do %ecx. Nie jestem bieg�y w AT&T, ale
my�l�, �e powinno to wygl�da� tak:

	mov $data1(,%edi,1), %ecx

  (tzn. ze znakiem dolara przed zmienn�).

[...]
> Po prostu nic mi nie wypisuje :(

 Ale, patrz�c z pozytywnej strony, program nie jest mordowany przez
system :) (a tak si� mog�o zdarzy�).

--
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

Re: Prosty programik, ale nie dziala...
#1856
Author: Piotr
Date: Mon, 18 May 2009 03:20
24 lines
585 bytes
Slicznie Ci dziekuje... Napisalem pierwsza instrukcje i dziala... Prosze
jeszcze o pomoc... wydawalo to mi sie banalne... ale niestety znowu mi
tradycyjnie nie dziala :(

Program teraz wyswietla mi odpowiedniki w ASCII elementu tablicy data1
... Jaka instrukcja "zamienie" to na cyfry???

Probuje dodac 0x30 (addl $0x30, %ecx) ... Ale to jest zle...

Liczbe data1, mam tak napisana:

data1:
	.byte 0x00, 0x00, 0x00 itd...

czyli po dodaniu 0x30 powinien dostac znak '0' i to ladnie powinno mi
wypisac... Niestety tego nie robi...


Prosze o pomoc...


Pozdrawiam serdecznie
Piotr

Re: Prosty programik, ale nie dziala...
#1857
Author: "Bogdan (bogdro)
Date: Mon, 18 May 2009 17:28
35 lines
1319 bytes
Piotr pisze:
> Slicznie Ci dziekuje... Napisalem pierwsza instrukcje i dziala... Prosze
> jeszcze o pomoc... wydawalo to mi sie banalne... ale niestety znowu mi
> tradycyjnie nie dziala :(
>
> Program teraz wyswietla mi odpowiedniki w ASCII elementu tablicy data1
> ... Jaka instrukcja "zamienie" to na cyfry???
>
> Probuje dodac 0x30 (addl $0x30, %ecx) ... Ale to jest zle...
>
> Liczbe data1, mam tak napisana:
>
> data1:
>     .byte 0x00, 0x00, 0x00 itd...
>
> czyli po dodaniu 0x30 powinien dostac znak '0' i to ladnie powinno mi
> wypisac... Niestety tego nie robi...

 No pewnie, bo w %ecx, jak ju� ustalili�my, jest *adres* pierwszego
bajtu zmiennej do wypisania, a nie pierwszy bajt do wypisania. Dodaj�c
do niego 0x30, po prostu przesuwasz ten adres w %ecx na zmienn�
znajduj�c� si� 0x30 bajt�w dalej i to j� wypisujesz. Innymi s�owy: nie
zmieniasz zawarto�ci zmiennej "data1" przed jej wy�wietleniem. Spr�buj

	lea data1(,%edi,1), %ecx
	addl $0x30, (%ecx)

(chodzi o t� drug� linijk�).

--
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