Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2011, 17:05   #1
adokS
 
Регистрация: 31.10.2010
Сообщений: 4
По умолчанию проблемы с директивой .386p

Здравствуйте. При подключении ".386p" (для включения 32-разрядых команд) совершенно меняется программный код, и, естественно, все идет на перекосяк. Программа работает под DOS, компилятор tasm, линковщик tlink. В чем проблема. Если у кого-нибудь есть идеи, пожалуйста отзовитесь.
adokS вне форума Ответить с цитированием
Старый 02.11.2011, 21:31   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

пишите эту дерективу после указания модели памяти.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 02.11.2011, 21:54   #3
adokS
 
Регистрация: 31.10.2010
Сообщений: 4
По умолчанию

Спасибо, помогло Не могли бы пояснить, почему так получается?
adokS вне форума Ответить с цитированием
Старый 03.11.2011, 04:00   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

adokS
при указании .386 (а masm понимает еще и .486, .586, .686, .mmx) компилятор считает, что кроме подключения новых инструкций, которые появились с intel 386, все регистры стали 32-разрядными, поэтому перед инструкциями содержащими 16-разрядные регистры (ax, bx, cx, dx, si, di, bp, sp, flags) будут поставлены префиксы db 66h, а перед командами обращающимися к памяти, имеющей косвенную адресацию через bx, bp, si, di будет стоять префикс db 67h
Mikl___ вне форума Ответить с цитированием
Старый 03.11.2011, 12:19   #5
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
adokS
при указании .386 (а masm понимает еще и .486, .586, .686, .mmx) компилятор считает, что кроме подключения новых инструкций, которые появились с intel 386, все регистры стали 32-разрядными, поэтому перед инструкциями содержащими 16-разрядные регистры (ax, bx, cx, dx, si, di, bp, sp, flags) будут поставлены префиксы db 66h, а перед командами обращающимися к памяти, имеющей косвенную адресацию через bx, bp, si, di будет стоять префикс db 67h
Как это? 66h подставляется только перед 32-битными регистрами, 16-битные команды с регистрами остаются 16-битными.

Код:
.model small
.data
.code
.386
begin:
mov ax,@data
mov ds,ax

mov eax,123
mov ax,123

mov ax,4c00h
int 21h
end begin
Дизасм:
Изображения
Тип файла: jpg disasm.jpg (14.1 Кб, 134 просмотров)
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 07.11.2011, 04:18   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Tronix
а теперь поставьте .386 первой инструкцией и 66h префикс окажется перед 16-битными регистрами
Код:
		.386
		.model small
		.data
		.code
		begin:
66B80100 	mov ax,@data
668ED8		mov ds,ax

B87B000000	mov eax,123
66B87B00	mov ax,123

66B8004C	mov ax,4c00h
CD21		int 21h
		end begin

Последний раз редактировалось Mikl___; 07.11.2011 в 13:53.
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемы с IE Tradua HTML и CSS 1 05.08.2011 06:54
Проблемы с БД Verwolf C/C++ Базы данных 2 22.05.2011 09:52
Проблемы с С# PDV199003 Помощь студентам 0 04.06.2010 14:38
проблемы с if Vergil Общие вопросы C/C++ 8 21.04.2010 21:43
проблемы с IE xakzona Помощь студентам 1 16.12.2008 21:53