"Переправка" кода линкером
Код:
mov cur_pri, bx
пишет
Код:
mov [di], ebx
mov bx, 0001
add [bp-77], ah
sbb ax, 0131
add [bx+si], al
mov bx, 0001
add [bp-77], ah
sbb ax, 0131
add [bx+si], al
по информации debug'ера.
Т.е. вместо 16 битного кода - 32 битный.
Ключ /3 стоит. Без него появляется сообщение "32 bit record encountered". В коде, помимо 16 битных команд, есть инструкции fsin и fcos. Вообще, что это за сообщение про 32битную запись и когда оно может возникать и почему код изменяется?
т.е. например вместо mov [priatki],bx написать
mov word ptr [priatki],bx. надеюсь поможет :]
Не поможет, дело совсем в другом. ;-)
tarekon
Код не изменяется, просто компилишь ты в 32-битный код, а дебагер понимает его как 16-битный.
Команда mov [cur_pri], bx имеет следующий 32-битный код: 66 89 1D ХХ ХХ ХХ ХХ. Последние 4 байта (ХХ ХХ ХХ ХХ) - адрес операнда cur_pri.
В 16-битном варианте дебагер понимает код 66 89 1D как mov [di], ebx, а далее распознает адрес как команды. Спорю на что угодно, что cur_pri у тебя находится по адресу 00 00 01 BB !!! )))))))))))
P.S.
32-record encountered (обнаружена 32-разрядная запись) - Обнаружен объектный файл, содержащий 32-битовые записи 80386, а параметр /3 не используется.
Видимо ты скомпилил как 32-битный код, соответственно компоновщик требует, чтобы и линковали его с использование 32-бит. Посмотри, возможно что-то не так с ключами компилятора или в тексте проги устанавливается 32-битность...
P.P.S.
В гугле по запросу "32 bit record encountered" первая же ссылка ведет на описание этой ошибки. )))