Вопрос № 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