ďťż

Ł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
  •