2013-10-02 6 views
1

Используя TASM, я успешно запрограммировал цифровой секундомер (LAP и обычный) на emu8086, но когда я пытаюсь запустить его на TASM, я получаю ошибку Forward reference needs override. Я знаю, почему эта ошибка возникает, поскольку у меня есть две процедуры, включая и следующую процедуру: call, поэтому ставить одну из процедур до того, как другая не будет работать. НапримерОшибка перенапряжения в сборе вперед

proc1 proc 
;some code 
CALL proc2 
;some code 
ret 
endp 

proc2 proc 
;some code 
CALL proc1 
;some code 
ret 
endp 

Другим решением было бы определение/писать всю процедуру вместо вызова его, но это дает ошибку Relative jump out of range. (Мой код также имеет несколько переходов)

Мой вопрос в том, что есть все же я могу удалить ошибку forward reference needs override в моей ситуации?

+0

Мне любопытно, есть ли конкретная причина, по которой вы используете TASM? Его последняя версия была выпущена в 1996 году, это 17 лет назад! – us2012

+0

@ us2012 да есть. В любом случае есть ли обходной путь? – worriednacho

+0

Аппетитно да. См. Мой ответ ниже. – us2012

ответ

1

Некоторые другие источники, похоже, предполагают, что TASM имеет опцию командной строки с несколькими проходами /m2, которая будет выполнять указанное количество проходов над исходным кодом. В вашем случае должно быть достаточно двух проходов, так как первый проход увидит определение proc2, а второй проход затем сможет его использовать, чтобы правильно перевести предыдущий call proc2.

+0

Можете ли вы, пожалуйста, продемонстрировать, как? Я еще не читал о/м2. Была бы отличная помощь – worriednacho

+0

@worriednacho Когда вы набираете 'tasm.exe myfile.asm', чтобы собрать исходный код, просто поставьте' tasm.exe/m2 myfile.asm' вместо этого. Или вы просите более подробное объяснение того, как второй проход разрешит проблему? – us2012

+0

Огромное спасибо сире :) – worriednacho