Учу ассемблер по книге Калашникова, только используя не масм, а фасм. Столкнулся с такой проблемой. Написал программу: Код (Text): ;--------------[.code section]----------------------------- org 100h mov dx, messageString call outString call waitKey mov dx, messageStringTwo call outString call waitKey int 0x20 ;--------------------------------- outString: mov ah, 0x9 int 0x21 retn ;--------------------------------- waitKey: mov ah, 0x10 int 0x16 retn ;--------------------------------- ;--------------[.data section]----------------------------- messageString db 'Enter key...$' messageStringTwo db 'Ok!$' ;---------------------------------------------------------- Запускаю, все работает нормально. Запускаю под АФД и вижу следующее: После первого Код (Text): call waitKey Выполняется код по адресу, а после программа попадает на F000. Почему так?
Используйте TRW2000 или отладчик борланда, насколько помню AFDPRO при старте портит регистры для проверки запустите программку под отладчиком и без Код (Text): macro hex2ascii { cmp al,10 sbb al,69h das } org 100h use16 mov [temp_reg], sp push ax push bx push dx push cx push si push di push bp mov si, (_sp - _ax) mov cx, 8 jmp @do @@: pop [temp_reg] @do: call convert_proc mov WORD [_ax+si], ax mov WORD [_ax+si+2], dx sub si, (_bx - _ax) loop @B ; вывод строки mov ah, 9 mov dx, string int 21h ret convert_proc: mov al, BYTE [temp_reg] call al2ascii mov dx, ax mov al, BYTE [temp_reg+1] call al2ascii ret al2ascii: aam 16 hex2ascii xchg al, ah hex2ascii ret temp_reg dw ? string db 'ax=' _ax rb 4 db 13,10 db 'bx=' _bx rb 4 db 13,10 db 'dx=' _dx rb 4 db 13,10 db 'cx=' _cx rb 4 db 13,10 db 'si=' _si rb 4 db 13,10 db 'di=' _di rb 4 db 13,10 db 'bp=' _bp rb 4 db 13,10 db 'sp=' _sp rb 4 db '$'