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

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


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

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

Выпуск № 500
от 24.07.2006, 20:05

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


Вопрос № 49532: Обясните мне пожалуйста почему команда mov ah, 9 занимает 2 байта ? Насколько я знаю один любой символ это всегда 1 байт. ..
Вопрос № 49534: А почему команда mov dx, offset My_name занимает 3 байта ?...
Вопрос № 49555: Уважаемые эксперты. Проблема такая система Win XPSP2 не ассемблируется программа на MASM ни на TASM пробовал разные исходники разные версии программ с разных источников, что то наверное я делаю не так, хотя делал все по рассылке Калашникова О. может ...

Вопрос № 49.532
Обясните мне пожалуйста почему команда mov ah, 9 занимает 2 байта ?
Насколько я знаю один любой символ это всегда 1 байт.
Отправлен: 19.07.2006, 01:34
Вопрос задал: Drakon366 (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Drakon366!
Первый байт - код команды. Второй байт - непосредственный операнд команды.
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская, 66
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 19.07.2006, 01:39
Оценка за ответ: 4

Отвечает: Волков Павел Юрьевич
Здравствуйте, Drakon366!
1 байт на опкод, 1 на число до 255. Однобайтные инструкции - (inc reg, dec reg и другие) не содержащие смещений, числовых значений, с предопределенными регистрами (stos, lods и другие). Успехов.
---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 2-ой класс)
Ответ отправлен: 19.07.2006, 16:44
Оценка за ответ: 4

Отвечает: Пашка
Здравствуйте, Drakon366!

-.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.-
mov ah,9 - B409h - это машинное представление данной команды, которое говорит нам о том что у нас есть встроенный в команду операнд(09h = 9), расшифровка остальной части машинного кода, можете занятся вы на досуге используя тех. документацию к процессорам x86 компании Intel. Например: B4 - это загрузка данных в регистр ah.
-.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.-

Удачи!
Ответ отправил: Пашка (статус: 1-ый класс)
Ответ отправлен: 19.07.2006, 23:27
Оценка за ответ: 5


Вопрос № 49.534
А почему команда mov dx, offset My_name занимает 3 байта ?
Отправлен: 19.07.2006, 02:41
Вопрос задал: Drakon366 (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: newinfo2005
Здравствуйте, Drakon366!
1 байт код команды, а операнд 2 байта(offset My_name, а оно как известно определяет смещение в данном случае в 2 байта).
---------
"Спасибо" - нет такой валюты.
Ответ отправил: newinfo2005 (статус: 7-ой класс)
Ответ отправлен: 19.07.2006, 12:38
Оценка за ответ: 4

Отвечает: Sergijj
Здравствуйте, Drakon366!

Если посмотрите любым просмотрщиком, который "понимает" шестнадцатеричный код, в скомпилированный файл, то увидите, что эта команда будет в машинных кодах иметь примерно такой вид:

BA 04 00

, где BA - это код процессорной мнемоники mov с 16-битной адресацией (ближний указатель), а 04 00 - это сам "ближний" (т.е. в пределах текущего сегмента памяти) указазатель (сначала - младший байт смещения, потом - старший).

Ну вот. В кратце - так.

Если после ответа у Вас возникли вопросы по сегментации, то рекомендую прочитать любой мало-мальски полный (а не "отписку") учебник (или просто книжку) по архитектуре процессора 80x086, ибо это - база. Без _этого_ - никуда...:)

Удачи!
---------
Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 3-ий класс)
Ответ отправлен: 19.07.2006, 13:55
Оценка за ответ: 5

Отвечает: Волков Павел Юрьевич
Здравствуйте, Drakon366!
1 байт - опкод инструкции mov, 2 байта на смещение от начала сегмента до метки My_name с учетом базы 100h и 16 битной адрессации. Успехов.
---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 2-ой класс)
Ответ отправлен: 19.07.2006, 16:54

Отвечает: Пашка
Здравствуйте, Drakon366!
-.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.-
Всё очень просто. Предположим что метка 'My_name' находится по адресу 0100h. Тогда BA0001 - машинное предсатвление команды mov dx, offset My_name, размером в 3 байта, 1 байт(BAh - это команда) + 2 байт(0001 - это операнд). Надо заметить что 0001h - адрес метки(задома на перед) 'My_name', которая находтся как мы сказали ранее по адресу 0100h.
-.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.--.-

Да прибудит с вами сила.
Ответ отправил: Пашка (статус: 1-ый класс)
Ответ отправлен: 19.07.2006, 23:43
Оценка за ответ: 4


Вопрос № 49.555
Уважаемые эксперты. Проблема такая система Win XPSP2 не ассемблируется программа на MASM ни на TASM пробовал разные исходники разные версии программ с разных источников, что то наверное я делаю не так, хотя делал все по рассылке Калашникова О. может кто подскаже где можно взять подробный мануал с примерами по ассемблированию программ. С уважением Valerui
Отправлен: 19.07.2006, 09:39
Вопрос задал: Valerui (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Волков Павел Юрьевич
Здравствуйте, Valerui!
1)Возможно дело в DEP(Data Execution Prevention) System->Advanced->Performance Options->DEP, если установленно для всех программ, могут быть проблемы. У меня установленно "только для системных файлов" и все работает. 2) Создайте файл masm.cmd следующего содержания: ";goto m1<cr/lf>.386<cr/lf>.model flat<cr/lf>.code<cr/lf>_ep:<cr/lf>ret<cr/lf>end _ep<cr/lf>:m1<cr/lf>ml /c /coff masm.cmd<cr/lf>link /subsystem:windows masm.obj<cr/lf>del masm.obj" (уберите кавычки,<cr/lf> замените на конец строки), поместите в папку с файлами LINK.EXE,
ML.ERR,ML.EXE,MSPDB50.DLL и запустите его, если создали правильно файл в папке появится файл masm.exe. Набор файлов для проверки(перечисленные выше) http://offffh.narod.ru/masmprobe.rar, размер 475KB. По поводу мануала: при ассемблировании смотрите параметры программы(ml.exe, link.exe) и по ошибкам определяйте проблемы. Указанные мной параметры сборки для ml.exe и link.exe для GUI приложений, для консольных - link.exe /subsystem:console. Для создания программ из рассылки Калашникова MASM мне найти не удалось(нужна 16bit версия). Подойдет FASM (flatassembler.net) ~700KB/Windows, 187KB/DOS или TASM 4.1 (http://offffh.narod.ru/TASM5.ZIP) - полный пак с 16Bit и 32Bit версией, 4.1MB. PS:Может быть ошибка в параметрах компиляторов, появлялись ли ошибки при компиляции или просто ml.exe не запускается? Вопрос задан не полно. Не понятно, что пытались сделать?
---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 2-ой класс)
Ответ отправлен: 19.07.2006, 16:35
Оценка за ответ: 5


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное