Служба прерывания на ассемблере (int 21h) и ее поведение (w / OllyDbg)

Здравствуйте, товарищи-программисты!
У меня глупый (для вашего lvl) вопрос:
Использование плоского ассемблера и его отладка с помощью ollydbg (v2.00.01)

У меня есть следующий код:

format PE

org    100h

start:
       mov eax, 0    ; clear entire register
       mov edx, 0    ; clear entire register
       
       mov ah,  02h  ; define control character 
       mov dl,  'A'  ; character it needs to print to "standart output" (?)
       int      21h  ; interruption service call
       
       hlt

Итак, с приведенным выше кодом у меня две проблемы:

  1. OllyDbg сообщает «Нарушение прав доступа» при чтении [FFFFFFFF], когда речь идет о линии с вызовом службы прерывания.
  2. Я переписал приведенный выше код, используя управляющий символ mov ah, 05h. По-прежнему возникает ошибка из-за 1-го пункта.

Было бы любезно с вашей стороны помочь мне решить эти два требования:

  1. Понимание разницы между стандартным выводом и принтером по умолчанию.
  2. Запись одного символа в console (?) без использования регистра ds (и любых ранее определенных данных).

Большое спасибо всем, кто отвечает!

Решено ...
Как выяснилось, вы не можете использовать прямой звонок служб DOS из исполняемого файла Win32.


person Futman    schedule 27.02.2021    source источник
comment
Вы уверены, что это работает как программа DOS в NTVDM? Судя по виду вашей программы (format PE), вы собираете ее в исполняемый файл Win32. Из такого исполняемого файла невозможно вызвать службы DOS.   -  person fuz    schedule 28.02.2021
comment
@fuz, ага, понятно. Спасибо! Попробую найти информацию об услугах Win32. (Думаю, это поможет)   -  person Futman    schedule 28.02.2021
comment
Не редактируйте ответ в своем вопросе. Если вы хотите ответить на свой вопрос, опубликуйте ответ. А поскольку вы этого еще не сделали, сейчас самое время совершить тур.   -  person IInspectable    schedule 28.02.2021