Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 853
от 16.09.2007, 19:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 383, Экспертов: 25
В номере:Вопросов: 3, Ответов: 5


Вопрос № 101573: Уважаемые эксперты. Вопрос у меня такой. 2 винта.На каждом из них Винда, которая ставилась по отдельности. Нужно что бы при старте, при нажатии определенной кнопки "C" или "D" грузилась винда соответсвуюшего диска ...
Вопрос № 101595: Вечер добрый! Совершенно непонятно, почему при написании минимальной оконной программы на ассемблере размер файла 2,5 кб, а на языке C ЗНАЧИТЕЛЬНО больше? Это недостаток всех ЯПВУ или недоработка компиляторов? Какую дополн...
Вопрос № 101681: Добрый день. Хотел бы попросить рассказать мне немного (или дать ссылку) о том, как можно сделать, чтобы я например в одном .asm файле описывал процедуры, а в другом их просто мог вызывать? т.е. что-то типа import procs.asm Компилятор и л...

Вопрос № 101.573
Уважаемые эксперты.
Вопрос у меня такой. 2 винта.На каждом из них Винда, которая ставилась по отдельности.
Нужно что бы при старте, при нажатии определенной кнопки "C" или "D"
грузилась винда соответсвуюшего диска
;BIOS загружает 1 сектор с первого жесткого диска MBR по адресу 0000:7с00h
;затем копирует сам себя в 0000:0600h откуда и начинает выполнение ???
Добавим в начало MBR такой код

mov ax,0
int 16h
cmp ah,'D' ; Сравниваем нажатую клавишу или D или C
je D ; и делаем соответствуюший переход
cmp ah,'c' ;
je C

D:
mov ah,2 ;читаем
mov al,1 ;читаем один первый сектор 512 байт
mov es,_segment ;сегмент 0000
mov bx,_offset ;и смещение буфера куда читаем 0600H
mov cl,1 ;номер сектора (для mbr это 1)
mov ch,0 ;номер дорожки
mov dh,0 ;номер головки
mov dl,81h ; второй жесткий диск
int 13h
jmp 0000:0600h ; переходим на выполнение MBr со второго диска, остальное он сделает сам
C:
;с этого места выполняется стандартный MBR

;Остается перевести в Hex машинный код и например DiskEdit-записать в начало
;предварительно сократив немного "системные сообшения" типа Invalid Partition Table заменив на IVP например.
Будет работать такая штука ?
Отправлен: 10.09.2007, 20:23
Вопрос задал: Olmel (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 16)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Olmel!

Вам нужно:
1) Внимательно изучить MBR на диске С:, особенно обьязательные структуры.
Для Вашего кода нужно освободить 40 байт и он должен быть расположен после копирования в другое место (т.к. после выполнения команды int 13h старый код будет затерт и неизвестно какая команда будет в точке возврата). Если поработать над ним, то можно его сократить (оставить только 28-29, байт смотрите приложение), к примеру:
53 0058 B1 01 mov cl,1;номер сектора (для mbr это 1)
54 005A B5 00 mov ch,0;номер дорожки
итого 4 байта
56 005E B9 0001 mov cx,1
итого 3 байта.
2) MBR диска D: нужно загружать по адресу 0000:7С00 и передавать ему управление, он сам себя скопирует куда нужно.
3) Загрузчики операционных систем:
-9х простые и очень любят перезаписывать свой загрузчик не обращая внимание на содержимое MBR;
-ХР сложнее. Две ссылки по загрузке ОСей WindowsServer2003 и Windows2000(могут быть полезными).
4) Сохраните важную информацию расположенную на диске С:, а вдруг.

Cтатья описывающая методику действий.

Удачи!

Приложение:

---------
И только наступив на грабли мы приобретаем драгоценный опыт!

Ответ отправил: Зенченко Константин Николаевич (статус: Специалист)
Ответ отправлен: 12.09.2007, 14:43
Оценка за ответ: 5
Комментарий оценки:
спасибо за ответ
спасибо за статью
ХОРОШАЯ СТАТЬЯ
завтра дочитаю и напишу все по новой
Но сначала вопрос
где взять описание вот этих цифирек
53 0058 B1 01 например
я имею вввиду всех команд описание в hex
Спасибо!!


Вопрос № 101.595
Вечер добрый!

Совершенно непонятно, почему при написании минимальной оконной программы на ассемблере размер файла 2,5 кб, а на языке C ЗНАЧИТЕЛЬНО больше?

Это недостаток всех ЯПВУ или недоработка компиляторов?

Какую дополнительную информацию компиляторы вкладывают в файл программы? Это балласт или действительно полезно?
Отправлен: 11.09.2007, 01:08
Вопрос задал: Dmitry R (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Dmitry R!
С точки зрения размера - зто недостаток всех ЯВУ.
За обеспечение какого-то набора стандартных возможностей и функций
приходится платить.
Все не перечислю, но некоторые:
1.Создание кучи
2.Разбор параметров командной строки
3.Отработка исключений (например, деление на 0)
4....
В ассемблерных программах такой стандартный набор не нужен,
добавляется программистом по необходимости.
А вот в ЯВУ не обойтись, поэтому и вставляется в каждую программу.
Кстати, наличие стандартных возможностей предусмотрено стандартом С.
---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 11.09.2007, 11:49
Оценка за ответ: 5
Комментарий оценки:
Отвечено на все вопросы с достаточной подробностью.

Довольно странно, что в современных пакетах отсутствует возможность отказаться от вставки тех частей программы, которые иногда совершенно бесполезны.
По-моему, в этом прослеживается некоторая недоработка компиляторов.

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Dmitry R!

Компиляторы ЯВУ вставляют свой стартовый и завершающий код, основная задача которого определить параметры среды, параметры коммандной строки, версию операционной системы, подготовить основную программу к выполнению и потом корректно ее завершить (даже если была критическая ошибка). В программах на ассемблере за обработку ошибок отвечает программист.
В приложениии не полный листинг программы на Паскале полученый с помощью IDA:
program a;
begin
end;

Обратите внимание на имена фунций которые не используются.
Размер программы (которая запускается и сразу завершается) 1632 байта.
Для сравнения прикрепляю аналогичную программу на ассемблере.
Удачи!

Приложение:

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
И только наступив на грабли мы приобретаем драгоценный опыт!

Ответ отправил: Зенченко Константин Николаевич (статус: Специалист)
Ответ отправлен: 11.09.2007, 15:33


Вопрос № 101.681
Добрый день.
Хотел бы попросить рассказать мне немного (или дать ссылку) о том, как можно сделать, чтобы я например в одном .asm файле описывал процедуры, а в другом их просто мог вызывать?
т.е. что-то типа import procs.asm
Компилятор и линкер Tasm32 и Tlink32

И еще хотел бы узнать, где взять просто win32api, желательно на русском.

Спасибо!
Отправлен: 11.09.2007, 17:35
Вопрос задал: Alexey B (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Egugondiy
Здравствуйте, Alexey B!
1. У вас есть основной файл, например hello.asm. Создаете файл proc.asm куда помещаете необходимые процедуры. Пишите в основном файле в сегменте кода:
include proc.asm
Если вы имеете ввиду создание собственных динамических библиотек(DLL), то почитайте здесь:
http://www.wasm.ru/article.php?article=1001017
2.Справочник по функциям API на английском:
http://cracklab.ru/download.php?action=get&n=NjA1
на русском:http://megalib.com/books/903/delphi_api.zip
Русский on-line справочник на cracklab.ru:
http://cracklab.narod.ru/api/
Ответ отправил: Egugondiy (статус: 1-ый класс)
Ответ отправлен: 11.09.2007, 18:00

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Alexey B!

Компиляция в один файл:
Директива PUBLIC указанная метка становится доступной для других модулей программы.
Директива EXTRN описывает метку, определенную в другом модуле (с помощью PUBLIC).
Директива GLOBAL действует, как PUBLIC и EXTRN одновременно.
Директива COMM описывает общую переменную.

Компиляция в разные файлы:
-создается библиотека A.DLL с экспортируемыми функциями
-создается A.LIB с помощью IMPLIB из динамической библиотеки
-в своей программе Вы подключаете A.LIB директивой INCLUDELIB
Пример создания библиотеки(глава 7.4) и описание директив(глава 3.3.8) в книге Зубкова.
Для каждого примера есть варианты команд компилятора TASM.

Интернет справочники по основным функциям API: первый и второй
Удачи!
---------
И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Специалист)
Ответ отправлен: 11.09.2007, 18:40


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.58 от 10.09.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное