Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

[FASM] Wypisywanie znaku w trybie tekstowym.



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Inne języki
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
hit02



Dołączył: 20 Sty 2014
Posty: 7
Skąd: Gdańsk

PostWysłany: Wto Lis 18, 2014 8:40 pm  OP    Temat postu: [FASM] Wypisywanie znaku w trybie tekstowym. Odpowiedz z cytatem Pisownia

Od niedawna uczę się asemblera x86 i mam problem. Gdy wpisuję taki kod, to zamiast litery "A" na ekranie pojawia się "S".
Kod:
literka db "A"

mov al, [literka]
mov ah, 0eh
int 0x10


Natomiast, gdy zrobię coś takiego, to wszystko działa jak trzeba.
Kod:
mov byte [00h], "A"
mov al, [00h]
mov ah, 0eh
int 0x10


Wydawało mi się, że "literka", to tylko etykietka oznaczająca miejsce w pamięci i oba kody powinny działać tak samo, ale widocznie jest inaczej.

Kod piszę w FASM-ie, potem konwertuję na bootowalne *.iso i uruchamiam w VirtualBox-ie.

Czy może mi ktoś napisać, co robię źle i jak to poprawić?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
marcin_an



Dołączył: 26 Maj 2005
Posty: 18822

PostWysłany: Wto Lis 18, 2014 9:36 pm      Temat postu: Odpowiedz z cytatem Pisownia

Składni FASMa nie pamiętam, ale na oko dane umieściłeś w segmencie kodu (adresowanym rejestrem CS), a w lini 3 wczytujesz bajt z segmentu danych (adresowanego rejestrem DS). Albo adresuj jawnie, pełnym adresem, albo ustaw DS na CS:
Kod:
mov al, [cs:literka]

lub
Kod:
push cs
pop ds
mov al, [literka]

(lub podobnie, właściwie dla składni używanej przez FASMa)
Pamiętasz o tym, że funkcja 10/0E ma jeszcze argumenty w rejestrze BX? Nie ustawiłeś ich na żadną konkretną wartość.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hit02



Dołączył: 20 Sty 2014
Posty: 7
Skąd: Gdańsk

PostWysłany: Wto Lis 18, 2014 9:54 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

No więc zrobiłem coś takiego, ale wciąż tylko literka "S" pojawia się w lewym górnym rogu.
Kod:
literka db "A"

mov bx, 0
mov al, [cs:literka]
mov ah, 0eh
int 10h
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
marcin_an



Dołączył: 26 Maj 2005
Posty: 18822

PostWysłany: Wto Lis 18, 2014 10:17 pm      Temat postu: Odpowiedz z cytatem Pisownia

Sprawdź w dokumentacji, czy składnia odwołania się do pamięci w formie segment:offset jest taka, jak podałem. Jak pisałem: składni FASMa nie pamiętam, więc mogłem coś poknocić - różne języki asemblerowe miały różne swoje własne dziwactwa.

Nie widzę też sprawdzenia, czy przypisanie wartości CS do DS coś naprawia.

Jeżeli nie, to jedyne, co jeszcze mi przychodzi do głowy - oprócz oczywiście pokręcenia przeze mnie składni - to fakt, że jesteś w bootloaderze. Spróbuj ustawić DS na 0x07C0, czyli adres, pod którym zaczyna się twój kod:
Kod:
mov ax, 07C0h
mov ds, ax

Niemniej wydawało mi się zawsze, że CS właśnie na to jest ustawione (w końcu wykonywany jest kod z tego segmentu), więc przepisanie CS do DS powinno to rozwiązać.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hit02



Dołączył: 20 Sty 2014
Posty: 7
Skąd: Gdańsk

PostWysłany: Wto Lis 18, 2014 10:42 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Chyba rzeczywiście byłem w bootloaderze, ale teraz już powinienem sobie poradzić.
To w sumie logiczne, ale nie musiałem wcześniej o tym myśleć, bo pisałem tylko w HLL-ach i tylko pod windowsa.
Dzięki marcin_an, za odpowiedź.

Poniżej kod, który działa. Może komuś się kiedyś przyda jeśli będzie miał podobny problem.

Kod:
literka db "A"

mov ax, 07C0h
mov ds, ax
mov bx, 0
mov al, [literka]
mov ah, 0eh
int 10h


PS Tu się jakoś zamyka tematy? Jeśli tak, to ja nie wiem jak.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Inne języki Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.14766 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |