[asm]invalid operand
Ostatnio zmodyfikowano 2009-05-07 17:21
pekfos Temat założony przez niniejszego użytkownika |
[asm]invalid operand » 2009-05-06 18:19:01 taki kod: format BINARY as 'COM' org 100h call _inc call _get call _ext num db 4 _inc: inc num ret _get: mov ah,0 int 16h ret _ext: mov ah,4ch int 21h nie działa(pod FASM) inc num [invalid operand] co jest źle? dodam jeszcze że nie jestem jeszcze orłem w asmie:) i dużo się można błędów spodziewać |
|
DejaVu |
» 2009-05-06 20:23:18 push ax mov al,num inc al mov num,al pop ax
|
|
pekfos Temat założony przez niniejszego użytkownika |
» 2009-05-06 20:54:05 inc byte[numb] działa tylko jak to tego numb wpasować '$' bo mi dos nie pozwala przeczytać wartości numb |
|
pekfos Temat założony przez niniejszego użytkownika |
» 2009-05-07 15:20:29 mov ah,9 mov dx,numb int 21h chyba wyświetla te zmienną ale tylko '$' brakuje do pełnego efektu |
|
manfred |
» 2009-05-06 20:33:22 no sorry... num jest stałą oznaczającą adres tej zmiennej którą sobie zrobiłeś. A adres to stała. Jeśli chcesz zwiększyć ZMIENNĄ, to dajesz inc rozmiar [zmienna] - tutaj inc byte [num]... A tak ogólnie to używaj add/sub co, 1 zamiast inc/dec, szybsze. W tym przypadku będzie po prostu add byte [num], 1. A poza tym, akurat tu zamiast funkcji powinieneś użyć makr - wtedy nie ma żadnego narzutu przez CALL i RET. |
|
manfred |
» 2009-05-06 21:57:02 Musisz sam przekonwertować znak na formę drukowalną przez DOS. A pod Windowsem musiałbyś tylko wywołać putchar... |
|
manfred |
» 2009-05-07 17:21:08 Zależy jako co chcesz wypisać. Jeśli jako znak: macro putchar char { if ~ char in <> mov dl, char end if mov ah, 02h int 21h } ;użycie: putchar 'a' ;jak liczbę mamy w rejestrze innym niż dl, to putchar al ;jak w dl to po prostu: putchar ;jak w zmiennej putchar byte [zmienna] Jeśli jako liczbę, to poszukaj, pełno tego na necie (ja ci nie pomogę - mam 64-bit windows, nie ma w nim ntdvm). |
|
« 1 » |