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

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


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

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

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

_Ayl_
Статус: Студент
Рейтинг: 1420
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1157
∙ повысить рейтинг »
vladisslav
Статус: 5-й класс
Рейтинг: 976
∙ повысить рейтинг »

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

Номер выпуска:1281
Дата выхода:23.11.2009, 02:00
Администратор рассылки:Лысков Игорь Витальевич, Модератор
Подписчиков / экспертов:437 / 66
Вопросов / ответов:1 / 1
IRC-канал по теме:#assembler

Вопрос № 174319: Здраствуйте, как написать 32 разрядную программу? Обращаться к регистрам по edx,eax,ebx и т д? И нужен ли особый компилятор может для этого? У меня еах и т. д. считает ошибкой......



Вопрос № 174319:

Здраствуйте, как написать 32 разрядную программу?
Обращаться к регистрам по edx,eax,ebx и т д?
И нужен ли особый компилятор может для этого?
У меня еах и т. д. считает ошибкой...

Отправлен: 17.11.2009, 13:46
Вопрос задал: Dimon4ik, 5-й класс
Всего ответов: 1
Страница вопроса »


Отвечает amnick, 5-й класс :
Здравствуйте, Dimon4ik.

Для того, чтобы обращаться к 32-битным регистрам, достаточно поместить директиву
.386
в начало программы. Эта директива определяет тип процессора, а следовательно, допустимые регистры, набор инструкций, режимы адресации и т.п. По директиве .386 разрешается использование всех непривилегированных инструкций процессора 80386. Директива .386Р разрешает также поддержку всех привилегированных инструкций 80386.

Подойдет любой ассемблер, который распознает эту директиву, например, TASM 3.x, MASM 5.x, 6.x. FASM использует немного другой синтаксис, но также может генерировать 32-битный код.

Однако, наличие директивы .386 еще не означает, что программа будет 32-разрядной. К 32-битным регистрам можно обращаться и из 16-битного кода. Для получения 32-разрядной программы, кроме директивы .386, еще и сегменты должны быть типа USE32.

Для TASM (возможно, для MASM аналогично, но у меня нет описания):
Когда вы используете упрощен ные директивы определения сегментов, Турбо Ассемблер генерирует сегменты USE32, если директива .386 указана перед директивой .MODEL, и сегменты USE16, если директива .386 указана после директивы .MODEL.

Если используется полное описание сегментов, то для генерации 32-битного кода (и 32-битных адресов при обращении к данным) нужно явно использовать тип USE32, например:

DataSeg SEGMENT USE32
; при обращении к данным из этого сегмента будут использоваться 32-битные смещения.
;....
DataSeg ENDS

CodeSeg SEGMENT DWORD PUBLIC USE32
ASSUME CS:CodeSeg
;....
CodeSeg ENDS

Успехов!

Ответ отправил: amnick, 5-й класс
Ответ отправлен: 17.11.2009, 16:55

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

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


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

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

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

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

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

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

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


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

    В избранное