Комментарии 17
на языке ассемблера.
Что-о-о? Что за язык ассемблера? Может, вы еще с большой буквы хотели написать "ассемблера", думая, что это имя? Нет "языка ассемблера"! Есть "язык ассемблер"!
В строке 6 используем прерывание 20h для завершения программы, этот способ не совсем корректный, но он простой и хорошо подходит для .com программ.
Всегда использовал обычный ret
Да, ret тоже вполне себе допустимый способ, внутри он использует все тот же int 20h, так как возврат идет на адрес PSP:0000, по которому лежит инструкция int 20h. Мне показался этот способ избыточным для дальнейшего описания его работы. Но упомянут он, безусловно, будет, так же как и функция 4ch превывания 21h.
При всей моей любви к MS-DOS, позволю себе усомниться в какой-либо практической пользе от изучения x86 ассемблера, особенно для реального режима.
Ассемблер он и в Африке ассемблер
Эмм, ну, не совсем. Как раз для каждого процессора он разный. В этом и смысл был изобретать языки более высокого уровня.
но они не поддерживают мою рабочую операционную систему Линукс, а разрабатываться хочется все-таки в удобстве
так-так-так.. Купим раритетный Москвич, но ездить будем на Тойоте. Компилировать тоже под Linux будем?
Сама статья - это набор каких-то допущений, много умных слов, предлагается тупо набить текст программы..
используем прерывание 20h
Ах ну да. Прерывание. Чтобы прервать. Нет уж, придумайте как объяснить все связно либо просто оставьте ссылку на самую лучшую книжку: Зубков С. В.
О, да, Зубков - сила! Сначала купил его книжку, а потом как-то даже пересёкся с ним в ФИДО! Как же давно это было... Кстати, есть она в формате CHM, но там не хватает некоторых глав (либо издание младшее - не знаю).
позволю себе усомниться в какой-либо практической пользе от изучения x86 ассемблера, особенно для реального режима.
Да вы оптимист. Похвально, конечно, но…
Так же как и реальный режим процессора, исключительно ради начальной загрузки до сих пор поддерживается текстовый режим экрана с возможностью из реального режима писать в видеопамять, PC Speaker, прерывание 9 для клавиатуры и много чего еще
А пацаны говорят, что js сейчас в моде.
Программа преобразующая исходный текст на языке ассемблера называется «транслятором», а не компилятором. Транслятор, в отличии от компилятора, не выполняет ни какой оптимизации получаемого кода. К примеру встретит транслятор 30 килобайт NOP-ов в исходнике, он их как есть перенесет в получаемый файл, а не оставит один NOP, а остальные выкинет. Проще говоря «тупо поставленная задача, тупо выполнена».
/зануда выкл
Технически, мнемоники языка ассемблера просто попытка придания смысла для опкода, чтобы облегчить программисту понимание машинного кода. Для некоторых несложных процессоров при достаточном опыте иногда этот промежуточный уровень становится лишним. Например, я в своё время ещё на кружке плотно имел дело с КР580ВМ80А (i8080), так через некоторое время заметил, что могу читать опкоды прямо по хексодампу.
Hidden text
0000 21 00 00 11 00 90 7E 12 23 13 7A FE C0 C2 06 00
0010 C3 00 C8
Но если с ванильным i8086 это ещё возможно, то с нынешним x86 (а тем более с x64) это маловероятно. Но часто используемые мнемоники вполне поддаются запоминанию.
Во времена, когда часто приходилось менять 75h на EBh - я тоже HEX довольно успешно читал. Хотя и HIEW'ом не брезговал. Потом навык был подутрачен. Сейчас патчу BIOS'ы для ноутов - VEN/DEV в видеомодулях ещё на глаз можно, а вот что-то посерьёзнее - без отладчика с визуализацией - никуда.
Если серьезно, то во времена MSDOS хорошим тоном для наСильника было генерить файл листинга, для последующей оптимизации/ускорения узких мест.
Ну а коды 90 CD CB 9A 70-7F в подкорке сохранились.
Изучаем язык ассемблера на примере TSR программы под MS-DOS. Часть 1