ZX-Ревю 1995 №5 1995 г.

Читатель - читателю - Исправление ошибок программы ТАSM 3.0.


Исправление ошибок програмны TASM з.о

(С) Константин Макаров,

г.Чебоксары, 1995.

Ассемблер TASM 3.0, распространяемый ИНФОРКОМом, очень удобен в работе, имеет приличный набор функций, облегчающих написание программ. Но некоторыми функциями невозможно пользоваться из-за ошибок, не выявленных тестированием. Цель этой статьи - дать возможность пользователям сделать полностью работоспособную версию, не дожидаясь сей милости от автора программы.

Теперь об ошибках. Принципиальных - две: не работает команда "Merge" и некорректно обрабатывается длина объектного кода, когда встречается команда "INCBIN". Во втором случае нормально работает команда "Run", но "Object save" выгружает на диск сгенерированную программу не полностью.

Для внесения изменений пришлось пожертвовать фрагментами текстовых сообщений, так "Merging file:" превратилось в "Merging", a "Import TASM 2.0 source file:" в просто "TASM 2.0 f i4le: " .

Ошибка "Merge" возникала из-за того, что при вызове процедуры чтения файла регистр DE - указатель длины подгружаемого текста всегда содержал 65535, что приводило к перекрытию рабочего кода, после чего программа зависала. Процедура, реализующая это, приведена в листинге 1.

Листинг 1. Первоначальный текст программы.

55311 CALL 34122 ;Печать

;сообщения.

55314 DEFB 13

55315 DEFM "Merging file"

;Признак конца. ;Ввод имени ;файла.

;Поиск файла.

55328 DEFB 0

55329 CALL 38308

55332 LD C,10 55334 CALL 34137

Эту процедуру пришлось переписать и добавить туда чтение информации о файле, что необходимо для нормальной работы программы (листинг 2).

Листинг 2.

ЧИТАТЕЛЬ - ЧИТАТЕЛЮ

55337

BIT

7,С

;Проверка:

Листинг 3.

;есть/нет.

55339

LD

A, 1

Фрагмент программы.

реализую-

55341

LD

(23823) ,A

щий увеличение счетчиков на длину

55344

RET

NZ

;Возврат,

подгружаемого файла.

;если нет.

55345

LD

HL,39221

;Начало

50953

LD

HL,(49214)

;текста.

50956

LD

(23307),HL

55348

CALL

38361

;Поиск конца.

50959

LD

DE,(23784)

;B DE -

55351

PUSH

HL

;длина файла.

55352

LD

DE,65535

;Зачем -

50963

ADD

HL,DE

;- непонятно.

50964

LD

(49214),HL

55355

LD

A,3 ;При A=3 длина

50967

LD

HL,(49221)

55357

LD

С,14 ;загрузки в DE.

50970

ADD

HL,DE

55359

CALL

34137 ;Загрузка файла.

50971

LD

(49221),HL

55362

DP

38262

50974

LD

A,(49216)

Исправленный текст программы.

55311

CALL

34122

55314

DEFB

13 '

55315

DEFM

"Merging "

55323

NOP

NOP :

NOP

55326

CALL

38308

55329

LD

C,10

55331

CALL

34137

55334

BIT

7,С

55336

RET

NZ

55337

LD

А,С ;B

А -номер файла.

55338

LD

С, 8

55340

CALL

15635 ;

Чтение.

55343

LD

A, 1

55345

LD

(23823)

, A

55348

LD

HL,39221

55351

CALL

38361

55354

PUSH

HL

55355

LD

A,255 ;

При A=255 длина

55357

LD

С, 14 ;

загрузки берет

ся из каталога.

55359

CALL

34137 ;

Загрузка -файла.

55362

JP

38262

Ошибка "INCBIN" связана с тем, что при подкачке файлов во время трансляции длина генерируемого объектного кода, которая хранится в ячейках 38569/38570 не увеличивалась на длину подгружаемого файла (листинг 3).

Этот дефект исправляется написанием подпрограммы, реализующей эту операцию (листинг 4).

Листинг 4.

Подпрограмма увеличения переменной, отвечающей за длину выг-

рузки

объектного кода.

50974

CALL

38681 ; что эквива

;лентно 55065 в не

;развернутом файле

55065

LD

HL,(38569)

55068

ADD

HL,DE

55069

LD

(38569),HL

55072

LD

А,(49216) ;Команда,

;ранее находящаяся

;по адресу 50974.

55075

RET

Для внесения изменений необходимо загрузить файл "ТА§М3.0-" CODE по адресу 49152. Это начальный адрес загрузки, после которой файл разворачивается в памяти. Но мы будем работать с неразвернутым кодом, для которого и приведены адреса в листингах.

После загрузки любым монитором (очень удобно использовать STS 2 6) следует внести исправления согласно листингу 5 (на следующей странице), -после чего выгрузить на диск файл с адреса 49152 длиной 10448 байт. Лучше не оставлять 'ему прежнее имя, а назвать его "TASM3. 1" .




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
От авторов - Содержание номера.
Проба пера - Стихи А. Баженова: Свечи, Смятение, Осень, Безисходность.
От автора - наступило лето...
Страницы истории - Толкин: рассказ о знаменитом писателе.
Приколы - "Сказка о рыбаке и рыбке."

В этот день...   19 апреля