🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#175
Author: Darek F.
Date: Sat, 01 Apr 2006 20:36
48 lines
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
#176
Author: Stachu 'Dozzie' K.
Date: Sat, 01 Apr 2006 18:53
49 lines
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
#177
Author: Arek
Date: Sun, 02 Apr 2006 01:16
24 lines
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