Страница Ивана Рощина > Статьи >

© Иван Рощин, Москва

ZXNet: 500:95/462.53
E-mail: bestview@mtu-net.ru
WWW: http://www.ivr.da.ru

Особенности ассемблера ZX ASM 3.0

(«ZX-Ревю» 5—6/1997)
Дата последнего редактирования: 14.11.2002.

    При выполнении команды «Load sts» (в меню Setup) в случае, если файл с указанным именем не будет найден, сообщение об ошибке не выдаётся.

    Если установлен режим Edit mode = Text, вы лишаетесь возможности доступа ко всем пунктам меню Run, кроме Inspect, что не всегда удобно.

    Не выдаётся сообщение об ошибке при ассемблировании команды загрузки в однобайтный регистр двухбайтного числа. Например, команда LD B,#1234 будет ассемблирована как LD B,#34.

    ZX ASM почему-то считает, что регистры HL, IX, IY равноправны, т.е. в любой команде, использующей HL, можно использовать и регистры IX, IY. Если в командах типа LD A,(HL) это действительно так, то к командам типа ADD HL,HL и к некоторым другим это не относится. Поясню сказанное на примере:

Табл. 1
Исходный текст Компилируется
ADD HL,IX
ADD HL,HL
SBC HL,IY
SBC HL,HL
EX  DE,IX
EX  DE,HL

    Эта ошибка может привести к крайне неприятной ситуации. Например, вы в своей программе написали «ADD HL,IX», забыв, что такой команды нет. Ассемблер также «ничего не заметил», а потом вы удивляетесь, почему ваша программа не работает.

    В командах, работающих с половинками индексных регистров, должны использоваться обозначения XL, XH, YL, YH. Между тем, STS в этих же командах использует обозначения LX, HX, LY, HY.

    Некорректно обрабатывается ситуация, когда вы определяете переменную с помощью DS, а количество отводимых под неё байтов равно нулю. Такой случай может возникнуть, например, если вы сначала определили переменную с помощью DB, а потом решили заменить DB на DS, при этом забыв заменить 0 на 1:

NAME  DB  0   —>   NAME  DS  0

    Если текст программы изменялся с момента последней записи на диск, ZX ASM перед выполнением «опасных» операций предложит сохранить его. Но как же ZX ASM определяет, изменялся текст или нет? Очевидно, просто путём сравнения контрольной суммы текста, находящегося в памяти, и текста, в последний раз записанного на диск. Но этот способ в некоторых случаях даёт неправильный результат, и ZX ASM считает, что текст не изменился:

 а) LD HL,#1234    LD HL,#3214
    DB %01100110   DB %11001100

(т.к. изменение порядка символов не влияет на контрольную сумму текста)

 б) LD A,5         LD A,4
    LD B,6         LD B,7

(т.к. ASC-коды символов «5» и «6» в сумме равны #35+#36=#6B, и этой же величине равна сумма кодов символов «4» и «7»).

Страница Ивана Рощина > Статьи >