Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 2
Регистрация: 13.09.2014
Сообщений: 68

Какие регистры изменяются в прерываниях BIOS?

01.03.2021, 13:02. Показов 1970. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Пишу для реального режима. Тестирую на голом железе (не под DOSом).
На одном из сайтов с описанием прерываний BIOS обнаружил информацию о том что, прерывания
портят содержимое некоторых регистров. Вот описание одного из прерываний (выделил как код для наглядности):

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;INT 10h, 02h   Set Cursor Position
 
;On entry:
        AH  ;02h
        BH  ;Display page number
        DH  ;Row
        DL  ;Column
 
;Returns:       None
 
;Registers destroyed:
        AX
        SP
        BP
        SI
        DI
В своей программе, код вызова прерывания я положил под метку:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
set_cursor_position:
        
        push BP
        mov  BP, SP
        
        mov Ah, BIOS_INT_10H_SET_CURSOR_POSITION
        mov DL, [BP+4] ; номер колонки
        mov DH, [BP+6] ; номер строки
        mov BH, [BP+8] ; номер страницы
        int 10h
        
        mov SP, BP
        pop BP
        ret
И вызываю его соответственно так:

Assembler
1
2
3
4
5
        push номер_страницы
        push номер_строки
        push номер_колонки
        call set_cursor_position
        add SP, 6
Получается, что после того как отработает прерывание, BP и SP будут испорчены (если верить описанию с сайта).
И я не смогу нормально "размотать" стек по возврату из set_cursor_position. Ну Ок, конкретно в этом случае остается один регистр CX, который не испортится и указатель вершины стека можно сохранить в нем. Но есть прерывания в которых задействованы все регистры. Например вот это:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
;INT 10h, 06h   Scroll Window Up
;On entry:      
        AH  ;06h
        AL  ;Number of lines to scroll (if 0, clear entirewindow)
        BH  ;Display attribute for blank lines
        CH  ;Row number of upper left corner
        CL  ;Column number of upper left corner
        DH  ;Row number of lower right corner
        DL  ;Column number of lower right corner
 
;Returns:       None
 
;Registers destroyed:
        AX
        SP
        BP
        SI
        DI
И как тут быть? Где сохранить SP?
Сегментные регистры для этих целей я не рассматриваю. Это ведь не правильно, так их использовать? Да?
Ссылку на сайт где я описания прерываний смотрю могу скинуть, если надо.
Я с ассемблером пока на ВЫ, но уверенно прогрессирую. А тут прям затык)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2021, 13:02
Ответы с готовыми решениями:

О BIOS Прерываниях и не только (философия новичка)
Всем доброго дня. Немного философский вопрос-рассуждение, попробую сформулировать и изложить в понятной форме. Я так понимаю, основа...

ответьте пожалуйста какие регистры
Какие регистры AGAL используются для передачи данных из вершинного шейдера во фрагментный

Какие регистры есть в ассемблере?
Народ самый глупый вопрос)) только начинаю программировать на ассемблере, сейчас пишу программу, регистры al, bl, cl, dl, заняты...

1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
02.03.2021, 14:50
Лучший ответ Сообщение было отмечено Krasnoyar как решение

Решение

Смотрите "Ralf Brown's Interrupt List" по винтажному x86 программированию
http://www.ctyme.com/intr/rb-0087.htm
оригинальные текстовики:
https://www.cs.cmu.edu/~ralf/files.html

Сомнительно, что SP портится, кроме тех вызовов, где это часть конвенции http://www.ctyme.com/intr/rb-4113.htm ( обратите внимание на Notes: Original flags are left on stack, and must be popped by caller ) .
А старшие половины 32-разрядных регистров EDI, ESI, EAX etc. 16-разрядный код не обязан сохранять, т.к. может и не подозревать о их существовании.
Чтобы не беспокоится о разночтениях и багах, достаточно вставить PUSHA и POPA вокруг вызова.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.03.2021, 14:50
Помогаю со студенческими работами здесь

16-разрядный процессор. Какие регистры?
Доброго времени суток, форумчане! К сожалению, у меня не получилось найти внятных ответов на следующие вопросы: Дан 16-разрядный...

Какие регистры для счётчика можно использовать и почему?
include '%fasm%/win64ax.inc' section '.code' executable start: sub rsp,8 invoke...

Какие регистры и как изменятся при выполнении команды
3. Какие регистры и как изменятся при выполнении команды retf 8; известны SS:SP до выполнения команды

Определите, какие данные будут содержать регистры EAX и EDX
Помогите пожалуйста разобраться вот с таким типом задач, как их делать? Заранее спасибо! Определите, какие данные будут содержать...

Какие регистры и как изменятся после выполнения команды ret 8
Нужно помочь с ответом на вопрос: "Какие регистры и как изменятся после выполнения команды ret 8, если известно содержимое регистров SS:SP...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru