Obsługa tablic

Odpowiedz Nowy wątek
2014-12-14 23:21
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.

Pozostało 580 znaków

2014-12-14 23:30
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...

  2. zobacz instrukcje rep stosb i rep movsb


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2014-12-14 23:47
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?

edytowany 1x, ostatnio: shimizu, 2014-12-14 23:48

Pozostało 580 znaków

2014-12-15 00:06
0

Tak.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2014-12-15 00:19
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?

edytowany 2x, ostatnio: shimizu, 2014-12-15 00:26

Pozostało 580 znaków

2014-12-15 00:55
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 ;]


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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