Obsługa tablic

0
  1. Czy ktoś mi może podać przykłady jak do tablicy władować jakieś dane? Najlepiej mi sie uczy na przykładach.

NASM

section .data
tablica times 10 db 0
d_tablica dd $ - tablica

n dd 10
d_n dd $ - n

a dd 0
d_a dd $ - a

section .text
global _start

_start:
	xor esi,esi
	mov esi, 0
_p1:
	cmp esi,[n]
	je _p1k
	
	mov eax,3
	mov ebx,0
	mov ecx,a
	mov edx,1
	int 80h
	
	xor ecx,ecx
	mov ch,a
	sub ch,48
	mov [tablica+esi],ch ;tutaj blad
	
	inc esi
	jmp _p1
_p1k:

Aktualnie program ma wczytać 10 liczb do tablicy. Oczywiście te liczby bd z przedziału 0-9.

  1. Mam tez drugie pytanie i problem.
    Mam wczytać z klawiatury tekst do zmiennej - A
    I teraz chciałbym wyświetlić tekst "tekst1 A tekst2". Oczywiście umiem to zrobić osobno ale problem pojawia się jak to mam włożyć do tablicy, w sensie:
    T[0] = tekst1
    T[1] = A
    T[2] = tekst2
    I wyświetlić.

Prosze o pomoc. Najlepiej przykłady + dobre materiały do nauki tego.

0
  1. A chcesz w pętli? Bo wiesz że mógłbyś od razu wczytać wszystko przez int 80h po prostu? ;]
    mov ch,a
    sub ch,48

i co ten kod oznacza? Bo widzisz różnicę między
mov ch, [a] a mov ch, a? To są dwa zupełnie różne zapisy...

  1. zobacz instrukcje rep stosb i rep movsb
0

Aktualnie po poprawieniu działa. Ale pojawia się problem po podaniu 5 cyfr: Segmentation fault (core dumped), myslałem że to przez to że dla a dałem typ dd ale po zmianie na db błąd dalej jest.

Sugerując się tym co napisałeś:

	mov eax,3
	mov ebx,0
	mov ecx,tablica
	mov edx,[n]
	int 80h

I po prostu bd podawać 10 cyfr bez żadnej spacji. tak?

0

Tak.

0

Świetnie ale chciałbym się dowiedzieć jak naprawić tamten błąd i z czego on wynika. A co do drugiego. Znalazłem tylko coś o movsb i spróbowałem:

section .data
text1 db "Lubisz "
d_text1 dd $-text1

text2 times 10 db 0
d_text2 dd $-text2

text3 db "?"
d_text3 dd $-text3

T times 30 db 0
d_T dd $-T

section .text
global _start

_start:

mov eax,4
mov ebx,1
mov ecx,text1
mov edx,[d_text1]
int 80h

mov eax,3
mov ebx,0
mov ecx,text2
mov edx,[d_text2]
int 80h

mov esi, text1
mov edi, T
mov ecx, [d_text1]
rep movsb

add edi,[d_text1]
mov esi, text2
mov ecx, [d_text2]
rep movsb

add edi, [d_text2]
mov esi, text3
mov ecx, [d_text3]
rep movsb

mov eax,4
mov ebx,0
mov ecx,T
mov edx,[d_T]
int 80h

mov eax,1
int 80h

Już jest fajnie bo wyświetla "Lubisz "i to co podam" " ale nie wyświetla mi "?" Wynika to pewnie z tego że w d_tekst2 nie ma prawidłowych danych. Więc zostaje chyba na twardo wpisać 10 chyba że jest jakiś inny sposób?

0

Świetnie ale chciałbym się dowiedzieć jak naprawić tamten błąd i z czego on wynika

Na oko wygląda ok. Chyba że coś zmieniłeś w tym kodzie, wtedy trudno powiedzieć co ci nie działa. Klikaj pod debugerem krok po kroku, innej rady nie ma. Ja przecież tego za ciebie nie będę robił.

Już jest fajnie bo wyświetla "Lubisz "i to co podam" " ale nie wyświetla mi "?" Wynika to pewnie z tego że w d_tekst2 nie ma prawidłowych danych. Więc zostaje chyba na twardo wpisać 10 chyba że jest jakiś inny sposób?

No możesz tam zamiast wypełnienia 0 dać spacje na przykład, ale efekt będzie taki sobie ;]

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