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

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


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

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

Выпуск № 638
от 24.12.2006, 02:35

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


Вопрос № 67471: Здраствуйте, дорогие эксперты!!! У меня к Вам вопрос по ассемблеру. Моя программа должна запускать на выполнение другую программу, которая хранится на дискете. Сразу оговорюсь, что пишу прогу не под Дос и не не под Win, поэтому можно использовать то...
Вопрос № 67556: Здравствуйте. Я пишу резидент, который должен записывать в файл, то что вводится на клавиатуре. Я пишу например в буфер, как мне потом его в файл писать??? Тоесть, при использовании прерываний в резиденте, получаем несколько строк закарлюк(ка...
Вопрос № 67580: Уважаемые эксперты! Подскажите, пожалуйста, зачем в проге нужна команда mov ah,9 (прога в приложении)? Зачем сначало заполнять 8-разрядный регистр, а затем 16-разрядный. И объесните ,пожалуста, почему при ассемблеровании этой же проги (ехе-файл я...
Вопрос № 67599: Привет ребята! Знаю что Ассемблер ето классная и сразу тяжёлая штука, к нему потолкуна меня одна проблема мне надо прошить сканер, я на верном пути или нет !???, и я знаю что Ассемблер толоько для процов Intel - так или нет, больше вопросов чем о...

Вопрос № 67.471
Здраствуйте, дорогие эксперты!!! У меня к Вам вопрос по ассемблеру. Моя программа должна запускать на выполнение другую программу, которая хранится на дискете. Сразу оговорюсь, что пишу прогу не под Дос и не не под Win, поэтому можно использовать только биосовские прерывания.
Ну дак вот, при помощи прерывания 13h (функция 02h) я считываю нужное количество секторов в память по адресу es:bx (там наша запускаемая программа). А вот как передать управление из моей программы на ту, которую считали с дискеты в память? Естественно, что при завершении работы последней, мы должны возвращаться обратно в нашу программу. В этом тоже загвоздка...
Заранее благодарен за ответ! ;)

Приложение:

Отправлен: 18.12.2006, 03:05
Вопрос задал: Leito (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ADSota
Здравствуйте, Leito!

Например запустить дальнюю процедуру находящуюся по адресу (cs:ip) 0x1234:0x5678:

...
call dword ptr[procaddr]
...
procaddr dw 05678h,01234h
...

PS - не думаю, что стандартный загрузочный сектор дискеты содержит возврат из функции, поэтому можно использовать команду:

...
jmp dword ptr[procaddr]
...
---------
Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Профессионал)
Россия, Зеленоград
Тел.: 8-916-53-43-916
ICQ: 84611301
----
Ответ отправлен: 18.12.2006, 09:48


Вопрос № 67.556
Здравствуйте.
Я пишу резидент, который должен записывать в файл, то что вводится на клавиатуре. Я пишу например в буфер, как мне потом его в файл писать???
Тоесть, при использовании прерываний в резиденте, получаем несколько строк закарлюк(как мне уже отвечали, нежелательно использовать прерывания в резидентной части). Как мне тогда быть?
Код прилогается.
Спасибо.

Приложение:

Отправлен: 18.12.2006, 17:42
Вопрос задал: Lestat (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Lestat!

Используй таймер, и проверку на доступность реентабельность ДОСа. Флаг такой есть.

удачи
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 18.12.2006, 17:59


Вопрос № 67.580
Уважаемые эксперты! Подскажите, пожалуйста, зачем в проге нужна команда mov ah,9 (прога в приложении)? Зачем сначало заполнять 8-разрядный регистр, а затем 16-разрядный.
И объесните ,пожалуста, почему при ассемблеровании этой же проги (ехе-файл я всё-таки заставил комп сделать) , но он выдал такую строку:
LINK : warning L4021: no stack segment
( Про отсутствие сегмента я понял , но почему ведь в проге стоит - CSEG segment? Непонятно.)

Приложение:

Отправлен: 18.12.2006, 20:27
Вопрос задал: Loriendil (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Вiктор
Здравствуйте, Loriendil!
1) mov ah,9 - когда вызывается прерывание 21h, то обработчик прерывания смотрит что находится в регистре аh. Если мы положим туда значение 9, то обработчик вызовет 9-ю функцию 21h-го прерывания (вывод сообщения), что нам и надо.
2) обработчик использует значения обоих регистров (и аh, и dх). В каждом из них должны быть нужные данные. А порядок заполнения значения не имеет, главное чтобы перед вызовом прерывания регистры содержали нужные значения.
3) линковщик справедливо ругается - в программе нет сегмента стека. Вы ведь объявили единственный сегмент, как для СОМ-программы. Вообще, у вас код СОМ-программы, а не ехе-программы. (один сегмент, команда начать код с 100h байт - org 100h)
4)для того чтобы сделать работоспособную ехе-программу код должен быть другой - содержать по крайней мере сегменты стека и кода, например:
stk segment stack 'STACK'
db 100 dup (0fah) ; стек на 100 байт
stk ends
CSEG segment
assume cs:CSEG, ds:CSEG, ss:stk
Begin:
mov ah,9
mov dx,offset Message
int 21h
xor ax,ax
int 20h
Message db 'Hello world!$'
CSEG ends
end Begin

вместо объявления сегмента стека по упрощённому синтаксису можно написать что-то вроде
.model small
.stack 1024 ; стек на 1024 байт
.data
Message db 'Hello world!$'
.code
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
end Begin
(Р.S. в коде могут быть ошибки, давно не писал на асме.)
---------
ни дня без строчки (но не получается)
Ответ отправил: Вiктор (статус: 10-ый класс)
Ответ отправлен: 18.12.2006, 21:02
Оценка за ответ: 5
Комментарий оценки:
Спасибо, очень понятное объеснение

Отвечает: Брона Вячеслав
Здравствуйте, Loriendil!
В регистре AHзадается код функции 21-го ДОС прерывания. В регистре DX задается смещение к выдаваемой на экран строке.
А сообщение выдается по поводу отсутствия в тексте вашей программы явного указания сегмента стека. это всего лишь предупреждение, и в данном случае все нормально.
На это предупреждение Вам придется обращать внимание при написании более сложных программ.
Дело в том, что, если Вы не указываете явным образом сегмент стека, ДОС, при загрузке Вашей программы на выполнение определит сегментом стека системмный, а его глубина весьма невелика - что приводит к неправильной работе программы при интенсивном использовании подпрограмм, особенно с большим колличеством параметров передаваемых через стек.
Ответ отправил: Брона Вячеслав (статус: 1-ый класс)
Ответ отправлен: 19.12.2006, 11:43
Оценка за ответ: 4


Вопрос № 67.599
Привет ребята!
Знаю что Ассемблер ето классная и сразу тяжёлая штука, к нему потолкуна меня одна проблема мне надо прошить сканер, я на верном пути или нет !???, и я знаю что Ассемблер толоько для процов Intel - так или нет, больше вопросов чем ответов- помогите пожалуйста!
Отправлен: 18.12.2006, 22:27
Вопрос задал: Корниенко Сергей Серг. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: IceWolf
Здравствуйте, Корниенко Сергей Серг.!
Если Вы говорите о создании собственной прошивки, то, в принципе, такие вещи пушут на ассемблере или на си. НО:
1. Информации по программированию микроконтроллеров, а это именно то, что Вам нужно, несравнимо меньше чем по x86.
2. Если даже Вы найдёте нужную литературу, документацию, то врядли в ближайшее время сможете написать прошивку-для этого надо разбираться в схемотехнике и знать как устроено конкретное устройство.
3. Вывод-лучше обратиться к специалисту.
Если же я не отбил интереса к теме то:
www.microchip.ru Производитель PIC-контроллеров
www.atmel.ru Производитель AVR-контроллеров
www.pic16f84a.narod.ru Сайт о программирвании микроконтроллеров
www.ikarab.narod.ru Сайт о программирвании микроконтроллеров
С уважением, IceW0|f.
---------
Идеальных защит не существует, ибо то, что создано человеческим разумом, им же будет и разрушено!
Ответ отправил: IceWolf (статус: 5-ый класс)
Ответ отправлен: 19.12.2006, 03:58


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.38 от 20.12.2006
Яндекс Rambler's Top100

В избранное