· Начало · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Помогите портировать прогу в МАСМ

Посл.отвђт Сообщенiе


Дата: Ноя 10, 2004 13:14:58 · Поправил: Arvis

Добрый день, господа.
У меня возникла необходимость переписать программу с ТАСМа на МАСМ(615). Практически все получилось без особых проблем(по крайней мере внешне), но возник ряд сложностей. Я перечислю строки вызвавшие затруднения, если кто знает как их перевести в МАСМ и поделится, буду очень признателен.
Итак:
mov cl, [byte bx+di]  ;error A2206: missing operator in expression
mov [byte ptr di], ASCNull ;error A2032: invalid use of register
mov [byte di], ASCnull ;error A2206: missing operator in expression
mov [byte di], '-' ;тоже
mov dl, [byte si-1] ;тоже


Вот и все. Приношу свои извинения за ламерские вопросы, но у меня большая проблема с Интернетом и поиски через гуглю затруднены до невозможности.

Заранее благодарен всем откликнувшимся.


Дата: Ноя 10, 2004 14:38:58

mov cl, byte [bx+di]
mov byte ptr [di], ASCNull
mov byte [di], ASCnull
mov byte [di], '-'
mov dl, byte [si-1]
Может так...
P.S.: сам пишу на FASM, так что сильно не бить :)


Дата: Ноя 10, 2004 17:32:02

Спасибо за ответ, компилятор уже не ругается, но прога работать перестала так как надо....
:(


Дата: Ноя 10, 2004 18:37:00 · Поправил: Asterix

Arvis
Посмотри в отладчике работающую прогу на tasm'е, в этом месте, чтоб не сомневаться..
в OllyDbg например, там синтаксис masm.


Дата: Ноя 10, 2004 20:37:04

Если мне не изменяет память, в TASM-е byte - это всего лишь константа, равная 1. Так что byte [di], например, эквивалентно [di+1]. При указании типа операнда требуется ptr.


Дата: Ноя 10, 2004 20:58:12

ava
„в TASM-е byte - это всего лишь константа, равная 1“
В MASM-е тоже.

„Так что byte [di], например, эквивалентно [di+1]. “
Неа


Дата: Ноя 10, 2004 23:15:39

А что этот кусок должен делать? может легче по-новой переписать?


Дата: Ноя 11, 2004 01:16:55

Quantum, у меня TASM превращает mov al,byte [di] в 8A 45 01, а mov al,byte ptr [di] - в 8A 05.


Дата: Ноя 11, 2004 01:56:20

ava
Точно. Никогда бы не подумал :-(


Дата: Ноя 11, 2004 12:31:41

Да, забыл сказать, может кому поможет разобраться(сам я этого пока не сделал) - прога на тасме в режиме IDEAL.

[to Turkish]
Вообще-то это не кусок кода, а набор строк вырванных из разных частей проги, так что переписывать нужно каждую по отдельности.

И еще одно: не ругается только masm.exe, а ml.exe все равно что-то не устраивает.


Дата: Ноя 11, 2004 21:21:58

masm.exe ?
Это ж какая версия-то MASM ? уже вроде есть ml.exe v8

По поводу ideal могу сказать, что FASM основан на подобном синтаксисе, может быть проще будет взять его? (если нужен coff, то он способен его создать.)
С MASM IMHO много головняка будет, т.к. mov eax,foo он понимает как mov eax,[foo], и ему нужно далать mov eax,offset foo.
Из-за путаницы с режимами адресации прога и не работает наверное.

Asterix дело говорит - смотри в Olly, там можно переключаться между режимами MASM / ideal.


Дата: Ноя 12, 2004 09:52:52

Хорошо посмотрю.

> masm.exe ?
> Это ж какая версия-то MASM ? уже вроде есть ml.exe v8

615 :)


Дата: Ноя 12, 2004 10:12:42

Попробывал ее загрузить в Олли. Он что-то не то выдал, она уменя под ДОС, он умеет с такими работать?


Дата: Ноя 12, 2004 11:30:52

Все, разобрался с помощью Turbo Debugger.
Заработало после того, как изменил код предоставленный ProgramMan'ом на:
mov [di], ASCNull 
mov byte ptr [di], '-' 
mov dl, [si-1]


И дальше в том же духе. Спасибо всем кто помогал.