Вопрос № 106452: Добрый день. Пишу диплом на Assembler`е, тема создание программы управляющей внешним устройством и работающей без ОС.
Вопрос: Как на ассемблере создавать .bin файлы и загружать код программы по нужному адресу? Ведь как я понимаю в загрузочный се...Вопрос № 106500: Здравствуйте, Уважаемые эксперты! Нужна Ваша помощь! Только начинаю изучать Ассемблер. Объясните, пожалуйста, если не трудно как из этого кода pop si получается код команды 5E? Заранее спасибо!:-) Или посоветуйте, может где в сети есть объяснения или...
Вопрос № 106.452
Добрый день. Пишу диплом на Assembler`е, тема создание программы управляющей внешним устройством и работающей без ОС.
Вопрос: Как на ассемблере создавать .bin файлы и загружать код программы по нужному адресу? Ведь как я понимаю в загрузочный сектор диска как то надо поместить код. Кроме .com и .exe, не включая объектные файлы и листинг, асм ничего не хотит компилировать. Возможно я не знаю всех дириктив ассемблера. Пробовал .bin создать в ручную, но для этого нужно знать все машинные команды (не команды асма). В принцепе их можно узнать дизасемблировав некую прогу, но процесс весьма трудоемкий и длительный. Меня наченает посещать
мысль о том, что придеться создавать отдельную программу для работы с диском, чтобы можно было манипулировать кодом будущей программы. Быть может есть какая нибудь полезная литературка или статейка? Времени до сдачи предварительного кода очень мало, а без нужной информации вся работа тормозит.Рассылки Олега Калашникова читал почти с нуля, хотя далеко не все, и не могу сказать что я полный юзер. Так же перечитал много другой литературы, но подходящей информации так
и не удалось найти. Заранее большое спасибо.
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Аверьянов Александр Игоревич!
В приложении программа которая запишет на дискету бут-сектор.
Бут-сектор загрузит основную программу(2048 байт 4-е сектора) с дискеты в память предварительно записанную на дискету (первая дрожка, первый сектор, головка нулевая)
Думаю Вы легко переделаете эту программу для записи на диск основной программы:
ah - функция 02(чтение) или 03(запись) прерывания 13h Bios
al - число читaемых | записываемых секторов
es:bx - сегмент:относительный адрес буфера для читаемых| записываемых данных
ch - дорожка для дискеты 3.5" 1.5мб ( 0:79)
cl - сектор на дорожке(1:18)
dh - головка (0:1)
dl - дисковод (FDD=0:7Fh, HDD=80h:0FFh)
Информация о уже используемой памяти.
Область памяти Содержимое
0000:0000 - 0000:03FF Таблица векторов прерываний
0000:0400 - 0000:04FF Область данных BIOS
A000:0000 - AFFF:FFFF Видеопамять EGA
B000:0000 - B7FF:FFFF Видеопамять монохромного дисплея
B800:0000 - BFFF:FFFF Видеопамять цветного дисплея
C000:0000 - EFFF:FFFF Страницы EMS/адаптер BIOS ПЗУ
F000:0000 - FFFF:FFFF BIOS ПЗУ
Удачи!
Приложение:
--------- И только наступив на грабли мы приобретаем драгоценный опыт!
Здравствуйте, Уважаемые эксперты! Нужна Ваша помощь! Только начинаю изучать Ассемблер. Объясните, пожалуйста, если не трудно как из этого кода pop si получается код команды 5E? Заранее спасибо!:-) Или посоветуйте, может где в сети есть объяснения или электронные уроки на эту тему.
Отправлен: 23.10.2007, 16:39
Вопрос задала: Алена (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Алена!
Язык ассемблера максимально приближен к машинным кодам. Другими словами это перевод машинных кодов в понятный для человека вид. Легче запомнить команду POP регистр, чем запоминать опкоды каждой команды. Команда ADC- имеет 6-ть опкодов. И это все запоминать? К примеру: POP регистр -состоит из опкода 58h и кода указанно регистра, для SI=6, т.е. 01011000=58h=pop r 00000110=06h=r - - - - - - - - - - - 01011110=5eh=pop si или
команда 74h 03h = jz isOk 01110000=70h=переход по условию, второй байт относительный адрес перехода 00000100=04h=E/Z-условие - - - - - - - - - - - 01110100=74h=jz ±смещение Описание состава команд процессора INTEL в приложении.
В приложении электронной версии книги С.Зубкова есть только описание соответствия нескольких(около 25-ти первых , для по
нимания смысла устройства-достаточно) команд, полная версия есть в печатных изданиях. Удачи!
Приложение:
--------- И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Специалист)
Ответ отправлен: 23.10.2007, 21:01 Оценка за ответ: 5 Комментарий оценки: Спасибо Вам ОГРМНОЕ за подробный и понятный ответ! И Вам удачи!!!:-)
Отвечает: Овчинников Алексей
Здравствуйте, Алена!
POP SI это не код, это команда Ассемблера
которая как раз и преобразуется компилятором в
команду 5Е.
--------- Любая задача имеет бесконечное множество решений
Ответ отправил: Овчинников Алексей (статус: 2-ой класс)
Ответ отправлен: 24.10.2007, 19:18 Оценка за ответ: 4