BTC в TASM

Тема в разделе "WASM.BEGINNERS", создана пользователем Virtual8086, 16 ноя 2010.

  1. Virtual8086

    Virtual8086 Дмитрий

    Публикаций:
    0
    Регистрация:
    23 окт 2009
    Сообщения:
    9
    Адрес:
    Беларусь
    Пишу в TASM программу, которая использует инструкцию BTC. При попытке компиляции ругается, что инструкция не поддерживается текущим типом процессора. Прописываю директиву .386 - компиляция проходит успешно, но

    Код (Text):
    1. mov ax, @data
    превращается в

    Код (Text):
    1. mov eax, ...
    Соответственно, программа попросту сваливается на взлёте. Как уговорить TASM просто поддержать BTC, не извращаясь с разрядностью кода?

    P.S. Обычно пишу на FASM, так что прошу прощения, если вопрос глуп. Поиск в гугле и по форуму ничего не дал :dntknw:
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    метод 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)
     
  3. Virtual8086

    Virtual8086 Дмитрий

    Публикаций:
    0
    Регистрация:
    23 окт 2009
    Сообщения:
    9
    Адрес:
    Беларусь
    TASM v3.1

    К сожалению, выбор TASM - не мой добровольный, поэтому FASM отпадает :dntknw: Касательно макросов - программа пишется не для меня и объяснять работу макросов будет очень затруднительно.
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Virtual8086
    Ну хотябы есть возможность взять TASM 5.0. у него помница было все в порядке с btc
     
  5. Virtual8086

    Virtual8086 Дмитрий

    Публикаций:
    0
    Регистрация:
    23 окт 2009
    Сообщения:
    9
    Адрес:
    Беларусь
    Скачал TASM 5+ со страницы wasm'а. Проблема не решается. :dntknw:

    Если несложно, сбросьте небольшую программку с BTC, которая у Вас скомпилируется, вместе с компилятором и линковщиком. Думаю, так будет намного быстрее.
     
  6. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Virtual8086,

    Давненько я не брал в руки TASM. Как мне кажется, проблема в том, что в режиме .386 директивы упрощённой сегментации создают 32-битные сегменты, в которых 16-битный код получает префиксы (естественно, если смотреть на него как на 16-битный, префиксы отработают в обратную сторону). Соответственно, если обернуть эти директивы в что-то вроде .8086/.386, всё получится как надо (проверено на TASM 4.1 и TLINK 7.1.30.1).

    Стандартная директива segment позволяет явно указать битность сегмента, так что с ней проблем никаких.