Ĺadny brzuch
Ten program ma dzielić liczbę podaną w zmiennej przez 1000, a następnie wypisać pierwszą jej cyfrę na ekran. Tylko dlaczego zamiast poprawnego wyniku mam jakieś dziwne krzaczki na ekranie i podany wyżej błąd?
.286 .model small .stack 100h .data zmienna dw 2374 .code start: mov ax,@data mov ds,ax mov dx,offset zmienna mov cx,1000 ;przez tyle dzielimy mov ax,dx ;dzielimy mov dx,0 div cx ;iloraz w rejestrze ax mov dx,ax mov ah,09h ;cyferka na ekran add dx,48 ;aby uzyskac kod ASCII cyfry int 21h koniec: mov ah,4ch mov al,0h int 21h end start end
 mov ah,09h   ;cyferka na ekran  add dx,48    ;aby uzyskac kod ASCII cyfry  int 21h
Coś mi świta, że 09h to wyświetlanie ciągu znaków.
Nie jestem dobry z asm - poprawcie mnie. Mi się wydaje, że powinno być tak:
mov ah,2 mov dl,kod_ascii int 21h
Tak mi przyszło do głowy, bo ah=2, to wyświetla pojedyńcze znaki. (chciałeś jeden znak wyświetlić)
Jeżeli się mylę, to powiedzcie, bo asma używałem dawno temu :D
Użytkownik Phisikus edytował ten post 05 kwiecień 2006, 14:04
Tak, o to mi chodziło, tylko nie wiem, jak ten wynik przenieść z 'ax' (tam jest wynik z dzielenia) do 'dl'. Jak wogóle przenosić małe (chyba jednobajtowe) wartości z rejestrów 16 bitowych do 8 bitowych?
Użytkownik Loracius edytował ten post 05 kwiecień 2006, 14:26
Tak, o to mi chodziło, tylko nie wiem, jak ten wynik przenieść z 'ax' (tam jest wynik z dzielenia) do 'dl'. Jak wogóle przenosić małe (chyba jednobajtowe) wartości z rejestrów 16 bitowych do 8 bitowych? Wystarczy mov dl,al, przecież cała wartość ax nie wejdzie do dl ;)
Użytkownik Cyrkiel edytował ten post 05 kwiecień 2006, 15:56
W sumie już zdążyłem wpaść na to :P Wystarczy trochę pokumać. OK Dzinks!
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
.286 .model small .stack 100h .data zmienna dw 2374 .code start: mov ax,@data mov ds,ax mov dx,offset zmienna mov cx,1000 ;przez tyle dzielimy mov ax,dx ;dzielimy mov dx,0 div cx ;iloraz w rejestrze ax mov dx,ax mov ah,09h ;cyferka na ekran add dx,48 ;aby uzyskac kod ASCII cyfry int 21h koniec: mov ah,4ch mov al,0h int 21h end start end
 mov ah,09h   ;cyferka na ekran  add dx,48    ;aby uzyskac kod ASCII cyfry  int 21h
Coś mi świta, że 09h to wyświetlanie ciągu znaków.
Nie jestem dobry z asm - poprawcie mnie. Mi się wydaje, że powinno być tak:
mov ah,2 mov dl,kod_ascii int 21h
Tak mi przyszło do głowy, bo ah=2, to wyświetla pojedyńcze znaki. (chciałeś jeden znak wyświetlić)
Jeżeli się mylę, to powiedzcie, bo asma używałem dawno temu :D
Użytkownik Phisikus edytował ten post 05 kwiecień 2006, 14:04
Tak, o to mi chodziło, tylko nie wiem, jak ten wynik przenieść z 'ax' (tam jest wynik z dzielenia) do 'dl'. Jak wogóle przenosić małe (chyba jednobajtowe) wartości z rejestrów 16 bitowych do 8 bitowych?
Użytkownik Loracius edytował ten post 05 kwiecień 2006, 14:26
Tak, o to mi chodziło, tylko nie wiem, jak ten wynik przenieść z 'ax' (tam jest wynik z dzielenia) do 'dl'. Jak wogóle przenosić małe (chyba jednobajtowe) wartości z rejestrów 16 bitowych do 8 bitowych? Wystarczy mov dl,al, przecież cała wartość ax nie wejdzie do dl ;)
Użytkownik Cyrkiel edytował ten post 05 kwiecień 2006, 15:56
W sumie już zdążyłem wpaść na to :P Wystarczy trochę pokumać. OK Dzinks!