Что делает int 10 в сборке? - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь выучить ассемблер для школы, и в начале примера кода есть эта часть:

mov al, 0
mov ah, 5
int 10

Перед этим есть процедура:

.386
instructions SEGMENT use16
        ASSUME  CS:instructions

interrupt_handler PROC
; some code
interrupt_handler ENDP

Что делает линия int 10? Это вызывает interrupt_handler процедуру? Почему именно 10?

Все это работает в DoSBox и собирается с использованием masm.

Ответы [ 2 ]

6 голосов
/ 07 января 2020

Я нашел то, что представляется полной копией кода на родном языке ОП (Poli sh). https://ideone.com/fork/YQG7y. Вот этот раздел кода (прогон через гугл переводчик):

; ================================================= =======

; main program - installation and uninstallation of the procedure
; interrupt handling

; determining page number 0 for text mode
start:
mov al, 0
mov ah, 5
int 10

Из этого кода видно, что это ошибка. Это должно быть int 10h, а не int 10 (аналогично int 0ah). int 10h задокументировано как:

VIDEO - SELECT ACTIVE DISPLAY PAGE
AH = 05h
AL = new page number (00h to number of pages - 1) (see #00010)

Return:
Nothing

Desc: Specify which of possibly multiple display pages will be visible

int 10 - это нечто совершенно другое:

IRQ2 - LPT2 (PC), VERTICAL RETRACE INTERRUPT (EGA,VGA)

Вызов обработчика прерываний IRQ2 с помощью int 10 фактически ничего не сделает с точки зрения программы. Поскольку текстовая страница по умолчанию, вероятно, уже равна 0, программа работает, как и ожидалось.


Правильный код:

mov al, 0
mov ah, 5
int 10h

установит для страницы отображения текстового режима значение 0, используя B IOS сервис 10 ч. Функция 5.

1 голос
/ 07 января 2020

Простой ответ - int 10h (я думаю, ваш код содержит опечатку) обычно вызывает обработчик прерываний реального режима в векторе, который предоставляет видеоуслуги. int 10h услуги включают настройку режима видео, вывод символов и строк и графических примитивов (чтение и запись пикселей в графическом режиме).

...