Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

FASM 16B string jako lokalna zmienna

Ostatnio zmodyfikowano 2016-12-15 20:47
Autor Wiadomość
Szustarol
Temat założony przez niniejszego użytkownika
FASM 16B string jako lokalna zmienna
» 2016-12-14 19:00:48
Witam!
Chcialem sobie wydrugowac stringa jako lokalna zmienna, cos jak w C:
C/C++
{
    string a = "test";
    cout << a;
}
zrobilem to tak:

                push bp
                mov bp, sp
                sub sp, 10
                mov [bp-2], word 't'
                mov [bp-4], word 'e'
                mov [bp-6], word 's'
                mov [bp-8], word 't'
                mov [bp-10], word 0x00
                lea si, [bp-2]
                call writestring
                mov sp, bp
                pop bp
niestety drukuje mi tylko pierwsza literke. Dlaczego tak?
funkcja writestring tutaj:

writestring:
push ax ;saving register because it is used
mov ah, 0x0E
loopt:
lodsb
or al, al
jz endedprint
int 0x10
jmp loopt
endedprint:
pop ax
ret
P-154927
pekfos
» 2016-12-14 20:03:23
Kopiujesz literę jako słowo (2 bajty), więc wstawiasz zero po każdym znaku.
P-154936
Rashmistrz
» 2016-12-14 21:04:34
Dlaczego potrzebujesz 2-bajtowych znaków?
Zauważ że używasz LODSB, a nie LODSW.
To przerwanie wypisuje wyłącznie glify o kodach od 0 do 255.
Sprawdź czy DF (direction flag) masz poprawnie ustawioną.

EDIT:
Jest jakiś kontakt do Ciebie?
Widzę, że zajmujesz się asemblerem.
Moglibyśmy czasem porozmawiać. :D
P-154945
Szustarol
Temat założony przez niniejszego użytkownika
» 2016-12-15 19:34:33
@Rashmistrz
zajmuję się od czasu do czasu kiedy znajdę chęci :D
jak coś to możesz na miala napisać szustarol123@gmail.com
P-155007
Rashmistrz
» 2016-12-15 20:28:10
@Szustarol: Panie! A facebooka pan nie masz? (Marcin Tyn)
Nie zapomnij znowu odpisać co było nie tak i jak sobie poradziłeś. :D
P-155011
Szustarol
Temat założony przez niniejszego użytkownika
» 2016-12-15 20:47:53
Dodałem na facebooku Karol Szustakowski.
Już wszystko poprawiłem, moja ramka wygląda teraz tak:

push bp
mov bp, sp
sub sp, 6
mov [bp-2], byte 0x00
mov [bp-3], byte 't'
mov [bp-4], byte 's'
mov [bp-5], byte 'e'
mov [bp-6], byte 't'
lea si, [bp-6]
call writestring
mov sp, bp
pop bp
doszedlem do wniosku, że przeciez pointer jest inkrementowany a nie dekrementowany więc zacząłem "od tyłu". Zacząłem też przesuwać bajty zamiast słów.
P-155014
« 1 »
  Strona 1 z 1