Пишу в TASM программу, которая использует инструкцию BTC. При попытке компиляции ругается, что инструкция не поддерживается текущим типом процессора. Прописываю директиву .386 - компиляция проходит успешно, но Код (Text): mov ax, @data превращается в Код (Text): mov eax, ... Соответственно, программа попросту сваливается на взлёте. Как уговорить TASM просто поддержать BTC, не извращаясь с разрядностью кода? P.S. Обычно пишу на FASM, так что прошу прощения, если вопрос глуп. Поиск в гугле и по форуму ничего не дал
метод 1. db 0fh, 0bbh, "mod r/m" или db 0fh, 0bah, "mod r/m with r=7", "imm8" соответствуют инструкциям btc r/m, reg и btc r/m, imm8 соответственно (P. S. упаковать в макросы ни кто не мешает) метод 2. какой тасм вы используете (используйте 16-битный он нормально генерирует) метод 3. написать программу используя fasm и макросы перехода (прилагаются к fasm)
TASM v3.1 К сожалению, выбор TASM - не мой добровольный, поэтому FASM отпадает Касательно макросов - программа пишется не для меня и объяснять работу макросов будет очень затруднительно.
Скачал TASM 5+ со страницы wasm'а. Проблема не решается. Если несложно, сбросьте небольшую программку с BTC, которая у Вас скомпилируется, вместе с компилятором и линковщиком. Думаю, так будет намного быстрее.
Virtual8086, Давненько я не брал в руки TASM. Как мне кажется, проблема в том, что в режиме .386 директивы упрощённой сегментации создают 32-битные сегменты, в которых 16-битный код получает префиксы (естественно, если смотреть на него как на 16-битный, префиксы отработают в обратную сторону). Соответственно, если обернуть эти директивы в что-то вроде .8086/.386, всё получится как надо (проверено на TASM 4.1 и TLINK 7.1.30.1). Стандартная директива segment позволяет явно указать битность сегмента, так что с ней проблем никаких.