Thread View: pl.comp.lang.asm
3 messages
3 total messages
Started by Darek F.
Sat, 01 Apr 2006 20:36
Początkujący - cmp, jb
Author: Darek F.
Date: Sat, 01 Apr 2006 20:36
Date: Sat, 01 Apr 2006 20:36
48 lines
2307 bytes
2307 bytes
Witam,
Dopiero zaczynam się uczyć assemblera i mam trochę problemów. Mam sobie
taki oto błędnie działający program. W komentarzach przedstawiam moje
rozumowanie, które jest niestety błędne.
section .text
global _start
_start:
petelka: ; początek pętli
mov eax, [bajt1]
inc eax ; zwiększenie bajtu1 o 1
mov [bajt1], eax
mov eax, 4
mov ebx, 1 ; wypisanie bajtu na konsoli
mov ecx, bajt1
mov edx, 1
int 80h
mov eax, bajt1
mov ebx, bajt2 ; ustawienie maksymalnej wartości bajtu1
cmp eax, ebx ; porówananie
jb petelka ; jeżeli bajt1 < bajt2 to idź do petelka
; jeśli nie to idź dalej? czyli zakończ program
mov eax, 1
int 80h
section .data
bajt1 DB 1
bajt2 DB 100
Problem polega na tym, że program naokrągło wypisuje mi znaki w konsoli.
Nie potrafie zlokalizowac błędu. Z góry dziękuje za pomoc. Kompiluje pod
Linux Aurox 11, NASM. Do czasu uruchomienia nie pojawiają się żadne
komunikaty.
--
+---------------------------------------------------+
| *Dariusz Filipiak* |
+---------------------------------------------------+
|Argumentów nie należy liczyć, lecz ważyć. /Cyceron |
+---------------------------------------------------+
| darekfilipMAŁPAo2KROPKApl |
+---------------------------------------------------+
| http://darekfilip.ovh.org |
+---------------------------------------------------+
Re: Początkujący - cmp, jb
Author: Stachu 'Dozzie' K.
Date: Sat, 01 Apr 2006 18:53
Date: Sat, 01 Apr 2006 18:53
49 lines
2228 bytes
2228 bytes
On 01.04.2006, Darek F. <darekfilipSPAMEROM_NIE@o2.pl> wrote: > Witam, > Dopiero zaczynam się uczyć assemblera i mam trochę problemów. Mam sobie > taki oto błędnie działający program. W komentarzach przedstawiam moje > rozumowanie, które jest niestety błędne. > > section .text > global _start > _start: > > petelka: ; początek pętli > mov eax, [bajt1] > inc eax ; zwiększenie bajtu1 o 1 > mov [bajt1], eax OMG. Po co tak? Nie da się inkrementować od razu bajt1? I dlaczego bierzesz całe cztery bajty, skoro masz tam przydzielony tylko jeden? > mov eax, 4 > mov ebx, 1 ; wypisanie bajtu na konsoli > mov ecx, bajt1 > mov edx, 1 > int 80h > > mov eax, bajt1 > mov ebx, bajt2 ; ustawienie maksymalnej wartości bajtu1 > cmp eax, ebx ; porówananie > jb petelka ; jeżeli bajt1 < bajt2 to idź do petelka > ; jeśli nie to idź dalej? czyli zakończ program Znowu: po co bierzesz cztery bajty? W obu miejscach masz tylko po jednym bajcie. > mov eax, 1 > int 80h > > section .data > bajt1 DB 1 > bajt2 DB 100 > > Problem polega na tym, że program naokrągło wypisuje mi znaki w konsoli. > Nie potrafie zlokalizowac błędu. Z góry dziękuje za pomoc. Kompiluje pod > Linux Aurox 11, NASM. Do czasu uruchomienia nie pojawiają się żadne > komunikaty. -- Feel free to correct my English Stanislaw Klekot
Re: Początkujący - cmp, jb
Author: Arek
Date: Sun, 02 Apr 2006 01:16
Date: Sun, 02 Apr 2006 01:16
24 lines
1515 bytes
1515 bytes
>> petelka: ; początek pętli >> mov eax, [bajt1] >> inc eax ; zwiększenie bajtu1 o 1 >> mov [bajt1], eax Tak jak napisał kolega zmienna 1-bajtowa a czytasz (i piszesz) cztery bajty - włazisz w bajt2. Inkrementuj AL nie EAX i porównuj nie z EBX ale z BL albo lepiej: >> section .data >> bajt1 DB 1 >> bajt2 DB 100 Zadeklaruj DD (4 bajty) a nie DB. Teraz masz w pamięci bajt1 1 (a do EAX pobierasz również bajt2 i ? ?) bajt2 100 ? ? ? te ??? są nieokreśline - jeżeli są niezerowe to pętla jest znacznie dłuższa :) Arek PS. Któryś z kolegów ma czas źle ustawiony?
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