[ASM] Podwójny tekst

0

Witam

[bits 32] 

; int x = getchar()
; eax
B:
call [ebx+2*4] ; getchar()
; W EAX mamy juz znak który wprowadzilismy]
cmp eax , 'A' ; porównanie znaku w EAX z litera A
jne nie_A ; jump of not equal

call A 
db 'Hello World' , 0xa , 0 ; trick z komenda "db" polaga na tam  że dane ( w  tym wypadku string  Hello World ) zostaną wrzucone miedzy operacje. Oczywiscie procesor nie rozróżnia operacji od danych
A:
call [ebx+3*4] ; prinf
add esp ,4 ; czyszczenie stosu
call [ebx] ; exit

nie_A:
call wypisz_nie_A
db 'To nie jest litera A', 0xa, 0
wypisz_nie_A:
call [ebx+3*4] ; printf
add esp , 4 
jmp B

Mam problem z tym , iż program ( o ile można to tak nazwać ) wypisuje tekst "To nie jest litera A" dwa razy. Dlaczego?
Do kompilacji używam asmloader'a od** Gynvael Coldwind**. http://gynvael.coldwind.pl/?id=387
Asembler NASM

1

enter to tez znak

1

Masz jmp B na końcu kodu. Jeśli znak nie jest literą A to program wypisze "To nie jest litera A" i będzie sprawdzał kolejne aż napotka literę A.

0

Dankę, już przejrzałem na oczy

1 użytkowników online, w tym zalogowanych: 0, gości: 1