Kilka pytań dotyczących assembly

0

Siema, aktualnie uczę się assemblera, nasm, na linuxie. Mam kilka pytań :

  1. Jak w sekcji data tworzę zmienną typu dd zawierającą liczbę np 15 i następnie chce wyświetlić tę liczbę to niestety po uruchomieniu programu nic się nie dzieje. (zakładam ze ta liczba jest wczytywana do tej zmiennej jako ascii, w jaki sposób mam to zamienić na typową liczbę?).
  2. Czy mogę wyświetlić zawartość rejestru bx? Jak tak to w jaki sposób? Jak zapisać do rejestru np bx tekst?
  3. Jeżeli chciałbym wyświetlić tablicę, a właściwie jej np 3 element??

PS: Do wyświetlania korzystam z funkcji :

mov eax,4
mov ebx,1
mov ecx,  <----- tutaj tekst,zmienna lub tablica
mov edx ,  <----- długość
int 80h
mov eax,1
int 80h

Dzięki za pomoc.

0

Ad 1: musiałbyś ją konwertować ręcznie na ASCII.
Ad 2: na 32-bitowych systemach może nie wypalić, bo potrzebowałbyś wrzucić tam wskaźnik, który prawie na pewno będzie zaalokowany powyżej 16-bitów.
Ad 3: lea, ale jeżeli jest to tablica intów, wracamy do tego, że musiałbyś ją ręcznie przekonwertować.

0

Czyli jeżeli chciałbym napisać pętle przy użyciu cmp, jmp, to w jaki sposób miałbym wprowadzić tą liczbę powtórzeń ?? Zamieniać ręcznie mógłbyś rozwinąć?

0
  1. Nie wiem czy pytasz teraz o czytanie czy pisanie... Jeśli wczytujesz stringa z klawiatury to musisz go konwertować na liczbę. Lecisz po znaku i robisz sobie w pętli
liczba = 0 
for cyfra in wejście:
    liczba = liczba*10 + cyfra-'0'

Jak chcesz wypisać liczbę, to robisz konwersję w drugę stronę więc

while liczba > 0
    cyfra = liczba%10
    liczba = liczba/10

I tak wyodrębione cyfry wypisujesz od końca

  1. Rejestr to jest rejestr! Ma stały rozmiar. bx ma 16 bitów, ebx 32 bity. Za wiele "tekstu" to tam nie zmieścisz...
  2. No to musisz wyliczyć adres tego 3 elementu tablicy, zrobić konwersję jak w 1) a potem wypisać.
0

Czyli to jest bardziej skomplikowane niż myślałem. Możecie polecić jakiś dobry kurs nasm'a pod linuxa??

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