Вопрос № 174319: Здраствуйте, как написать 32 разрядную программу? Обращаться к регистрам по edx,eax,ebx и т д? И нужен ли особый компилятор может для этого? У меня еах и т. д. считает ошибкой......
Вопрос № 174319:
Здраствуйте, как написать 32 разрядную программу? Обращаться к регистрам по edx,eax,ebx и т д? И нужен ли особый компилятор может для этого? У меня еах и т. д. считает ошибкой...
Отвечает 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 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.