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...
Author: Piotr
Date: Thu, 14 May 2009 20:31
Date: Thu, 14 May 2009 20:31
51 lines
695 bytes
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...
Author: "Bogdan (bogdro)
Date: Fri, 15 May 2009 17:43
Date: Fri, 15 May 2009 17:43
66 lines
1751 bytes
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...
Author: Piotr
Date: Mon, 18 May 2009 03:20
Date: Mon, 18 May 2009 03:20
24 lines
585 bytes
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...
Author: "Bogdan (bogdro)
Date: Mon, 18 May 2009 17:28
Date: Mon, 18 May 2009 17:28
35 lines
1319 bytes
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