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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

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

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: 10-й класс
Рейтинг: 730
∙ повысить рейтинг >>
Jimhucksly
Статус: 4-й класс
Рейтинг: 154
∙ повысить рейтинг >>
AMV007
Статус: 3-й класс
Рейтинг: 143
∙ повысить рейтинг >>

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

Выпуск № 1235 от 12.07.2009, 11:35
Администратор рассылки: Лысков Игорь Витальевич, Модератор
В рассылке: подписчиков - 427, экспертов - 62
В номере: вопросов - 1, ответов - 2

Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
оценить выпуск >>

Вопрос № 170213: Уважаемые эксперты, подскажите каким образом можно скомпилировать DOS программу, в которой встречается команда с 32-битным регистром EAX. Мне понятно, что это будет не COM, к которому я привык, а EXE. Я компилирую в основном на MASM611 с помощью кома...



Вопрос № 170213:

Уважаемые эксперты, подскажите каким образом можно скомпилировать DOS программу, в которой встречается команда с 32-битным регистром EAX. Мне понятно, что это будет не COM, к которому я привык, а EXE. Я компилирую в основном на MASM611 с помощью команды ml.exe prog.asm /AT, редко на TASM 5.0. Я так предполагаю, что MASM611 не подойдёт для компиляции под DOS, если в программе есть 32-битный регистр, но может TASM тогда подойдёт?
И ещё, каким простым и удобным отладчиком воспользоваться, чтобы посмотреть работу откомпилированной программы, в которой есть 32-битный регистр EAX. Я пока пользуюсь только AFDPRO, но он тоже только для 16-битных регистров, как и MASM611.
Заранее спасибо!

Отправлен: 06.07.2009, 22:51
Вопрос задал: Adsorores, Посетитель
Всего ответов: 2
Страница вопроса >>


Отвечает Airyashov, Студент :
Здравствуйте, Adsorores.
Для этого добавить нужно как минимум директиву использовать .386 или писать в кодах типа db 66,?,...
и MASM, TASM подойдет
отладчик cv из masm или td, td32 из TASM

Ответ отправил: Airyashov, Студент
Ответ отправлен: 07.07.2009, 08:32

Оценка ответа: 5

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 251931 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает _Ayl_, 10-й класс :
    Здравствуйте, Adsorores.

    Размер регистров зависит не от используемой ОС, а от процессора. Под DOS можно писать 32-битные программы, под Windows - 16-битные. Но если вы найдете, например, комп с 286 процессором, то 32-битная программа там не заработает.
    Вышесказанное не совсем верно (скажем, для запуска 16-битной программы под VIST'ой требуется оболочка типа DOS Box, а для 286-й можно написать эмулятор Pentium'а), но основная мысль, думаю, понятна: за регистры отвечает собственно процессор, а не ОС.
    Далее.
    Тип исполняемого файла (COM или EXE для DOS) - это вотчина ОС, а не процессора. Это ОС распределяет память, загружает программу, настраивает регистры и т.д. Процессор про это, грубо говоря, вообще не в курсе. А ОС абсолютно по барабану, что именно записано в файле. Ей главное (в случае с EXE, с COM не нужно даже этого), чтобы заголовок программы был корректным. В случае EXE-файла ОС считывает заголовок, загружает в свободное место код программы, н астраивает адреса (в соответствии с таблицей настроек в заголовке), а также стек и передает управление по адресу, указанному в заголовке.
    В случае с COM все вообще просто: резервируется вся свободная память, формируется префикс программы (256 байт, т.н. область PSP), файл загружается в память непосредственно за этой областью и производится передача управления по адресу PSP:100h, где PSP - сегментный адрес области PSP.
    Для чего я это так подробно расписал. А для того, чтобы показать, что ОС не в курсе, что именно у вас написано в программе. Программа выполняется процессором, а не ОС.
    TASM, MASM, а также остальные компиляторы ассемблера позволяют формировать 32-хразрядные команды.
    Для этого нужно вначале программы указать директиву .386 (как минимум).
    После этого можно использовать все регистры (например, AL, AX, EAX).
    Замечу, что при трансляции исходного текста 32-разрядные команды будут преобразованы в код при помощи префикса изменения размерности операнда. Проще говоря, непосредственно команды для 16-ти и 32-битовых регистров одинаковы. Они отличаются только префиксом.
    Соответственно, вы можете формировать 32-разрядные команды и вручную, написав:

    Код:

    db 66h
    mov ax, si


    Такая запись эквивалентна следующей:
    Код:

    mov eax, esi


    Только при этом нужно быть аккуратным в случае использования непосредственного значения.
    Например, последовательность операторов:
    Код :

    db 66h
    mov ax, 1
    nop ; код 90h
    nop ; код 90h


    эквивалентна не такому фрагменту:
    Код:

    mov eax, 1
    nop
    nop


    а такому:
    Код:

    mov eax, 90900001h


    Для достижения нужного результата надо писать так:
    Код:

    db 66hmov ax, 1
    db 0, 0


    Резюмируя, и TASM, и MASM при указании директивы .386 способны формировать 32-разрядный код, причем он может быть использован как при создании COM, так и при создании EXE файлов.

    В качестве отладчика для DOS рекомендую Turbo Debugger от Borland. td32 позволяет просматривать 32-битные регистры. Только после запуска нужно специально это указать.

    Ответ отправил: _Ayl_, 10-й класс
    Ответ отправлен: 07.07.2009, 12:40

    Оценка ответа: 5

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 251936 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
    оценить выпуск >>

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

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.5 от 08.07.2009

    В избранное