Вопрос № 22922: Повторюсь:
Мне хочется в обыном COM файле перейти в защиту, выйти из нее.
Здесь все ок. (Спасибо DSota)
НО! Очень неудобно писать 32 битный код, приходится пользоваться конструкциями типа:
mov cx,0
dw 0
или вообще db 0c6h...Вопрос № 22937: Мне на вопрос ответить нужно.
Вопрос:
Составить процедуры для:
1)установки вида курсора, начинающегося на 5-ой линии сканирования
и заканчивающегося на 12-ой линии.
2)прокрутки экрана на десять строк.
Вот, что я не понял:...Вопрос № 22947: Составить процедуры для:
установки вида курсора, начинающегося на 5-ой линии сканирования
и заканчивающегося на 12-ой линии.
Подставьте пожалуйста значения
source:
CSEG segment
assume cs:CSEG, ds:CSEG, ss:CSEG
org 100...
Вопрос № 22.922
Повторюсь:
Мне хочется в обыном COM файле перейти в защиту, выйти из нее.
Здесь все ок. (Спасибо DSota)
НО! Очень неудобно писать 32 битный код, приходится пользоваться конструкциями типа:
mov cx,0
dw 0
или вообще db 0c6h,05h,08h
ВОПРОС: Может директивы какие ассемблеру дать или еще как писать чтоб он переключался с 16 битных на 32 битные инструкции без объявления всяких там сегментов.
А то они пляшут друг относительно друга - то до проги то после нее разместится 32 битный, и смещения всякие. А мне нужно просто:
mov cx,1234 ; здесь 16 битная
mov ax,cr0
or ax,1
mov cr0,ax ;переключение
mov ecx,12345678 ; а здесь уже 32 битная
Отправлен: 01.07.2005, 02:14
Вопрос задал: Чупасин Федор Михайлович (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: Voituk Alexander
Здравствуйте, Чупасин Федор Михайлович! есть такие директивы, по крайней мере, для TASMa. Я в других не пробовал.
Стаыишь в начале программы .286 - разрешает инструкции 286 проца .286р - инструкции 286 проца в защищенном режиме (она НЕ переводит в защищенный режим, просто указывает, что используются команды. .386 и .386р - аналогично и естественно разрешается 32 битовые инструкции и адресация. 16-битовые и 32-битовые можно использовать совместно. Ассемблер сам знает.
дополнение
от Иванова Евгения: это в корне неверно! потому что если будут применяться префиксы, то это скажется на неправильной работе программы. ну вот ты объявил 16-битный сегмент. и ставишь команды 32-битные. будут префиксы! а при работе такого кода в 32-битном режиме - будет 16-битная работа!
Ответ отправил: Voituk Alexander (статус: 9-ый класс)
Отправлен: 01.07.2005, 12:03 Оценка за ответ: 3 Комментарий оценки: это совсем не то, в начале проги у меня стоит .586p часть проги идет обычным 16 битным кодом а вот другая часть должна идти в 32 битном коде (после перехода в защиту). Если я напишу mov eax,0 то ассемблер ставит перед кодом 66h, а после перехода в 32 битный режим та же команда mov eax,0 должна БЕЗ этого префикса 66h. А сейчас мне приходится писать mov eax,0 чере db...
Отвечает: Евгений Иванов
Здравствуйте, Чупасин Федор Михайлович!
Есть оператор LARGE (также есть SMALL)
вот они тебе помогут.
если применять их внутри квадратных скобок (адресация), то они меняют размер адресации. если "вне", то атрибуты команды.
также есть оператор FWORD PTR.
удачи!
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 01.07.2005, 14:58 Оценка за ответ: 4 Комментарий оценки: Т.е. перед КАЖДОЙ командой в 32 битной секции ставить LARGE?
Вопрос № 22.937
Мне на вопрос ответить нужно.
Вопрос:
Составить процедуры для:
1)установки вида курсора, начинающегося на 5-ой линии сканирования
и заканчивающегося на 12-ой линии.
2)прокрутки экрана на десять строк.
Вот, что я не понял:
1)Что за 5-ая линия сканирования ?
2)Здесь все понятно. Нужно воспользоваться функцией Int10h AH = 07 или 06, для прокрутки вверх и вниз.
Отправлен: 01.07.2005, 14:58
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: ASMодей
Здравствуйте, Терсков Алексей Николаевич!
Курсор можно представить как прямоугольник, состоящий из горизонтальных линий, вот это и есть линии сканирования. В вашем случае, вероятно, размер курсора составляет 8х16, то есть 16 линий по 8 точек в линии. Размер курсора устанавливается функцией 01 прерывания 10h. В регистре ch передается стартовая линия курсора, а в регистре cl - конечная линия.
Ответ отправил: ASMодей (статус: Профессионал)
Отправлен: 01.07.2005, 16:17
Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
размер знакоместа в текстовых режимах может быть до 8 на 32 точек.
то есть, высота символа может быть от 1 до 32 scan line.
поэтому и курсор (мигающий) может быть тоже размером таким же, как и ячейка символьная.
линии считаются сверху вниз.
например, 8 на 8 точек шрифт.
значит, чтобы курсор был как гориз. палочка внизу, то начальная scanline ставится равной 7. конечная при этом равна начальной.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 01.07.2005, 17:03
Вопрос № 22.947
Составить процедуры для:
установки вида курсора, начинающегося на 5-ой линии сканирования
и заканчивающегося на 12-ой линии.
Подставьте пожалуйста значения