Error reserved word used as symbol

xsTLL

0 / 0 / 0

Регистрация: 09.09.2022

Сообщений: 77

1

TASM

19.10.2022, 14:20. Показов 1025. Ответов 9

Метки dosbox, tasm (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте, подскажите пожалуйста, как исправить ошибку *Warning* Reserved word used as symbol: STACK ?
Операционная система Windows 7 64bit.
Работаю в TASM.
Компилирую с помощью DOSBox.
Строка из кода где происходит эта ошибка:

Assembler
1
STACK   SEGMENT PARA STACK 'STACK'

Добавлено через 1 час 52 минуты
Вот код целиком:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
TITLE   EX_PROG
    PAGE,132
STACK   SEGMENT PARA STACK 'STACK'
    DB 64 DUP('STACK')
STACK   ENDS
DSEG    SEGMENT PARA PUBLIC 'DATA'
SOURCE  DB 10,20,30,40
DEST    DB 4 DUP(?)
DSEG    ENDS
SUBTTL  ОСНОВНАЯ ПРОГРАММА
    PAGE
CSEG    SEGMENT PARA PUBLIC 'CODE'
    ASSUME CS:CSEG, DS:DSEG, SS:STACK
OUR_PROG PROC FAR
    PUSH DS
    SUB AX,AX
    PUSH AX
        MOV AX,DSEG
        MOV DS,AX
        MOV DEST,0
        MOV DEST+1,0
        MOV DEST+2,0
        MOV DEST+3,0
        MOV AL, SOURCE
        MOV DEST+3,AL
        MOV AL, SOURCE+1
        MOV DEST+2,AL
        MOV AL, SOURCE+2
        MOV DEST+1,AL
        MOV AL, SOURCE+3
        MOV DEST,AL
        RET
OUR_PROG    ENDP
CSEG    ENDS
    END OUR_PROG



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

19.10.2022, 14:20

Ответы с готовыми решениями:

Ошибка: reserved word used as symbol
Ошибка: reserved word used as symbol
Что я не так делаю?

use16
org 100h…

Используя предикаты parent(symbol,symbol), man(symbol), woman(symbol), married(symbol,symbol), записать факт
Используя предикаты parent(symbol,symbol), man(symbol), woman(symbol), married(symbol,symbol),…

Циклы do.while. Ошибка «Stack around the variable ‘symbol’ was corrupted»
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <math.h>

int main()
{…

Ошибка скрипта «Unquoted string «myiplist» may clash with future reserved word»
Пишу скрипт, выдает следующие ошибки:
Unquoted string "myiplist" may clash with future reserved…

9

Модератор

Эксперт по электронике

8297 / 4200 / 1598

Регистрация: 01.02.2015

Сообщений: 13,065

Записей в блоге: 4

19.10.2022, 18:02

2

Это предупреждение нужно воспринимать буквально, как переводится.
Исправить можно — заменив название сегмента на другое произвольное, хоть «oba_na».

Добавлено через 46 секунд
Только название сегмента в этой программе встречается 3 раза — вот везде и заменить.



0



0 / 0 / 0

Регистрация: 09.09.2022

Сообщений: 77

20.10.2022, 12:26

 [ТС]

3

ФедосеевПавел,
Необходимо заменить это?

Миниатюры

Ошибка: *Warning* Reserved word used as symbol: STACK
 



0



0 / 0 / 0

Регистрация: 09.09.2022

Сообщений: 77

21.10.2022, 12:18

 [ТС]

4

ФедосеевПавел,

Цитата
Сообщение от ФедосеевПавел
Посмотреть сообщение

Только название сегмента в этой программе встречается 3 раза — вот везде и заменить.

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



0



politoto

Модератор

1771 / 872 / 161

Регистрация: 23.07.2018

Сообщений: 3,006

Записей в блоге: 3

21.10.2022, 13:07

5

Цитата
Сообщение от xsTLL
Посмотреть сообщение

как исправить ошибку *Warning* Reserved word used as symbol: STACK ?

Warning — не ошибка(«Error»), а предупреждение о возможной опечатке, путанице и т.п.

Ассемблер из Visual Studio 2022 не выдал ни одного диагностического сообщения, когда успешно ассемблировал Вашу программу.

Windows Batch file
1
ml /omf /Zm warn.asm

Microsoft (R) Macro Assembler Version 14.32.31329.0
Copyright (C) Microsoft Corporation. All rights reserved.

Assembling: warn.asm


Для Вас важны все эти имена и классы сегментов, выписанные вручную, или Вы можете пользоваться упрощёнными директивами .CODE, .DATA и т.п.?
Для TASM можно писать короче.



0



0 / 0 / 0

Регистрация: 09.09.2022

Сообщений: 77

21.10.2022, 15:16

 [ТС]

6

politoto,

Цитата
Сообщение от politoto
Посмотреть сообщение

Для Вас важны все эти имена и классы сегментов, выписанные вручную, или Вы можете пользоваться упрощёнными директивами .CODE, .DATA и т.п.?

Да, важны.
Подскажите пожалуйста как убрать это предупреждение.
Желательно чтобы всё компилировалось с помощью DOSBox.



0



0 / 0 / 0

Регистрация: 09.09.2022

Сообщений: 77

21.10.2022, 15:21

 [ТС]

7

politoto,
Исправлял то что указано стрелкой на скриншоте на ‘stek’, но всё равно тоже предупреждение

Миниатюры

Ошибка: *Warning* Reserved word used as symbol: STACK
 



0



Модератор

Эксперт по электронике

8297 / 4200 / 1598

Регистрация: 01.02.2015

Сообщений: 13,065

Записей в блоге: 4

21.10.2022, 23:32

8

Если эта попытка не удалась — замените другую тройку идентичных слов.
Единственно, я всё же говорил, что название сегмента в программе встречается 3 раза. Ну, да ладно!.. Это вам за враньё удачи не будет.



0



politoto

Модератор

1771 / 872 / 161

Регистрация: 23.07.2018

Сообщений: 3,006

Записей в блоге: 3

22.10.2022, 09:48

9

Цитата
Сообщение от xsTLL
Посмотреть сообщение

Да, важны.

Если имена и классы сегментов Вам важны, зачем же Вы их заменяете?

Цитата
Сообщение от xsTLL
Посмотреть сообщение

Подскажите пожалуйста как убрать это предупреждение.
Желательно чтобы всё компилировалось с помощью DOSBox.

Так не пойдёт?

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
TITLE   EX_PROG
    PAGE,132
.MODEL SMALL
.STACK
.DATA
SOURCE  DB 10,20,30,40
DEST    DB 4 DUP(?)
SUBTTL  ОСНОВНАЯ ПРОГРАММА
    PAGE
.CODE
OUR_PROG:
.STARTUP
        MOV DEST,0
        MOV DEST+1,0
        MOV DEST+2,0
        MOV DEST+3,0
        MOV AL, SOURCE
        MOV DEST+3,AL
        MOV AL, SOURCE+1
        MOV DEST+2,AL
        MOV AL, SOURCE+2
        MOV DEST+1,AL
        MOV AL, SOURCE+3
        MOV DEST,AL
.EXIT
END OUR_PROG

Код

                               TITLE   EX_PROG
                                    PAGE,132
                                .MODEL SMALL
                                .STACK
 0000                           .DATA
 0000 0A 14 1E 28               SOURCE  DB 10,20,30,40
 0004  0004 [                   DEST    DB 4 DUP(?)
        00
       ]
                                SUBTTL  ОСНОВНАЯ ПРОГРАММА

Код

                                    PAGE
 0000                           .CODE
                                .STARTUP
 0000                      *@Startup:
 0000  B8 ---- R           *        mov    ax, DGROUP
 0003  8E D8               *        mov    ds, ax
 0005  8C D3               *        mov    bx, ss
 0007  2B D8               *        sub    bx, ax
 0009  C1 E3 04            *        shl    bx, 004h
 000C  8E D0               *        mov    ss, ax
 000E  03 E3               *        add    sp, bx
 0010  C6 06 0004 R 00                  MOV DEST,0
 0015  C6 06 0005 R 00                  MOV DEST+1,0
 001A  C6 06 0006 R 00                  MOV DEST+2,0
 001F  C6 06 0007 R 00                  MOV DEST+3,0
 0024  A0 0000 R                        MOV AL, SOURCE
 0027  A2 0007 R                        MOV DEST+3,AL
 002A  A0 0001 R                        MOV AL, SOURCE+1
 002D  A2 0006 R                        MOV DEST+2,AL
 0030  A0 0002 R                        MOV AL, SOURCE+2
 0033  A2 0005 R                        MOV DEST+1,AL
 0036  A0 0003 R                        MOV AL, SOURCE+3
 0039  A2 0004 R                        MOV DEST,AL
                                .EXIT
 003C  B4 4C               *        mov    ah, 04Ch
 003E  CD 21               *        int    021h
                                END

Код

Segments and Groups:

                N a m e                 Size     Length   Align   Combine Class

DGROUP . . . . . . . . . . . . .        GROUP
_DATA  . . . . . . . . . . . . .        16 Bit   0008     Word    Public  'DATA'
STACK  . . . . . . . . . . . . .        16 Bit   0400     Para    Stack   'STACK'
_TEXT  . . . . . . . . . . . . .        16 Bit   0040     Word    Public  'CODE'


Symbols:

                N a m e                 Type     Value    Attr

@CodeSize  . . . . . . . . . . .        Number   0000h
@DataSize  . . . . . . . . . . .        Number   0000h
@Interface . . . . . . . . . . .        Number   0000h
@Model . . . . . . . . . . . . .        Number   0002h
@Startup . . . . . . . . . . . .        L Near   0000     _TEXT
@code  . . . . . . . . . . . . .        Text     _TEXT
@data  . . . . . . . . . . . . .        Text     DGROUP
@fardata?  . . . . . . . . . . .        Text     FAR_BSS
@fardata . . . . . . . . . . . .        Text     FAR_DATA
@stack . . . . . . . . . . . . .        Text     DGROUP
DEST . . . . . . . . . . . . . .        Byte     0004     _DATA
SOURCE . . . . . . . . . . . . .        Byte     0000     _DATA

           0 Warnings
           0 Errors



0



0 / 0 / 0

Регистрация: 09.09.2022

Сообщений: 77

24.10.2022, 12:12

 [ТС]

10

politoto, спасибо большое, попробую)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

24.10.2022, 12:12

10

flat assembler
Message board for the users of flat assembler.


Index
> DOS > memory referencing: error: reserved word used as symbol

IceStudent

Joined: 19 Dec 2003
Posts: 60
Location: Ukraine

IceStudent 30 May 2005, 08:28

Hi!

When I trying to compile such simple code, I got an error: reserved word used as symbol. Why?

use16 
org 100h
        mov             dx,081Fh
        mov             cx,083Fh
        mov             ax,[dx]   ; <- error
        mov             [cx],ax
        mov             ax,[dx+2]
        mov             [cx+2],ax
        mov             ax,4C00h
        int             21h
    

But when I write with EDX, it compiled successful.

Post
30 May 2005, 08:28

Matrix

Joined: 04 Sep 2004
Posts: 1166
Location: Overflow

Matrix 30 May 2005, 09:16

use bx instead of dx for indexing.

you can also use si, di, [es:di], [ds:si]

Post
30 May 2005, 09:16

revolution
When all else fails, read the source

Joined: 24 Aug 2004
Posts: 19327
Location: In your JS exploiting you and your system

revolution 30 May 2005, 09:23

In 16-bit mode DX is not available as an addressing register.

[BX], [SI], [DI], [BP], [BX+SI], [BX+DI], [BP+SI], [BP+DI] only can be used.

Post
30 May 2005, 09:23

MazeGen

Joined: 06 Oct 2003
Posts: 977
Location: Czechoslovakia

MazeGen 30 May 2005, 09:45

Hmm, pretty weird error message. Shouldn’t it be something like «invalid operand» or «must be index or base register?

Post
30 May 2005, 09:45

IceStudent

Joined: 19 Dec 2003
Posts: 60
Location: Ukraine

IceStudent 30 May 2005, 10:15

Oh, I forgot about this.

Thanks!

Post
30 May 2005, 10:15
Forum Rules:

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum

I need to make a C++ program for an assignment that can add or subtract 1024 and 2048 bit binary numbers, and the functions that do said operations must be made in Assembly. I tried going about this by interpreting the numbers as 64-long arrays of 32 bit binary numbers and adding them one element after another, starting from the end, and writing the result into the third array. However, after making a testing version made for arrays with only 3 32 bit numbers each, I’m faced with the fact that the function doesn’t respond. I tried making a version of said function that works predetermined data, but the FASM compiler says «error: reserved word used as symbol.». There isn’t an answer I could find anywhere, so now I’m asking for help here.

section '.data' data readable writable

IN_NUM1 dd 0b00000100000000000000000000000000, 0b00000100000000000000000000000000, 0b00000111111111111111111111111111     ;"error: reserved word used as symbol" is here
IN_NUM2 dd 0b00000010000000000000000000000000, 0b00000010000000000000000000000000, 0b00000100000000000000000000000000
OUT_NUM dd 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000

section '.code' code readable writable executable

start:

        mov edi, [IN_NUM1]
        mov esi, [IN_NUM2]
        mov ecx, 3
        
PUSHING:

        mov eax, [edi]
        push eax
        mov eax, [esi]
        push eax
        inc edi
        inc esi
        loop PUSHING
        
        clc
        
ADDING:

        pop eax
        pop ebx
        adc eax, ebx
        mov [OUT_NUM+ecx-1], eax
        loop ADDING
        
    ccall [printf], [OUT_NUM]
    ccall [getchar]
    stdcall [ExitProcess],0

The error message from that line in a file by itself (editor’s note: from my computer, not the OP’s):

flat assembler  version 1.73.24  (16384 kilobytes memory, x64)
foo.asm [1]:
IN_NUM1 dd 0b00000100000000000000000000000000, 0b00000100000000000000000000000000, 0b00000111111111111111111111111111     ;"error: reserved word used as symbol" is here
processed: IN_NUM1 dd 0b00000100000000000000000000000000,0b00000100000000000000000000000000,0b00000111111111111111111111111111
error: reserved word used as symbol.

But IN_NUM1 dd 1,2,4 assembles fine.

Author’s edit:
Thanks to the help of @PeterCordes, I have made good progress. However, there are still some issues. With the new code, the addition goes like this: 87654321 + 00000000, FFFFFFFF + 00000001, 04000000 + 02000000. And if I don’t multiply ecx by 4, it goes «00000012 + 00000087, 00001234 + 00008765, 00123456 + 00876543». I don’t get why this happens, and I would very much appreciate your help. And as for the code itself:

section '.data' data readable writable

IN_NUM1 dd 0x12345678, 0x04000000, 0xFFFFFFFF
IN_NUM2 dd 0x87654321, 0x02000000, 0x00000001
OUT_NUM dd 0x00000000, 0x00000000, 0x00000000

section '.code' code readable writable executable

start:

        mov ecx, 3
        clc
        
ADDING:

        mov eax, [IN_NUM1+ecx*4]
        mov ebx, [IN_NUM2+ecx*4]
        adc eax, ebx
        mov [OUT_NUM+ecx*4], eax
        loop ADDING

Незадача

В TASM’е 5.0 пишу:

Код:

stack segment para public ‘stack’
    db  256 dup (?)
stack ends

на что ассемблер выдаёт:

*Warning* имя_программы.ASM(№_строки) Reserved word used as symbol: STACK

Объясните, пожалуста, где здесь ошибка?

7 ответов

325

20 февраля 2007 года

Franky

723 / / 10.08.2005

дык он почти русским пишет :)
замени ‘stack’ на что-нить, ибо слово зарезервировано.

дык он почти русским пишет :)
замени ‘stack’ на что-нить, ибо слово зарезервировано.

Ну ошибку то я со словарем кое как перевёл.

Странно, но в книжке, по которой я учусь, в качестве примера приведем фрагмент кода, в котором при описании сегмента использовалось слово «stack»!

325

20 февраля 2007 года

Franky

723 / / 10.08.2005

нас тоже учили писать так:
public segment para ‘stack’
но многое зависело от заголовка… Там что-то можно/нельзя в зависимости от того com/exe родится :)
Короче я бы и рад подсказать, да забросил АСМ года 4 назад…

261

20 февраля 2007 года

ahilles

1.5K / / 03.11.2005

попробуй вместо stack использовать _stack
насколько я понял эта программа для DOS (забудь про DOS), читани для начала мой учебник там говориться програмирование для windows
http://www.codenet.ru/progr/asm/newbee/

349

22 февраля 2007 года

Phantom-84

656 / / 27.10.2005

Специально раскопал свой DOS-архив…

Код:

STACKSEG     SEGMENT PARA STACK ‘STACK’
               DB STACKSIZE DUP (PARASIZE DUP (?))
  STACKSEG     ENDS

Отсюда видно, что STACK — это служебное слово, а также видно, как его нужно использовать…

349

22 февраля 2007 года

Phantom-84

656 / / 27.10.2005

Правда, помнится, что я писал под MASM… Может, у TASM свои причуды…

252

23 февраля 2007 года

koderAlex

1.4K / / 07.09.2005

в тасме лучше пользоваться упрощённой формой :
.stack 100h

Logo Море(!) аналитической информации!

Приложение E. Сообщения об ошибках

          В данном приложении описаны все сообщения, генерируемые Тур-
     бо  Ассемблером.  Обычно  сообщения выдаются на экран,  однако их
     можно переадресовать в файл или на принтер с  помощью стандартных
     средств DOS переадресации потоков, т.е. надо указать имя устройс-
     тва или файла с предшествующим ему  символом  "больше  чем"  (>).
     Например:

                     TASM MYFILE > ERRORS

          В Турбо Ассемблере генерируются сообщения следующих типов:

          - информационные сообщения;
          - предупреждающие сообщения;
          - сообщения об ошибках;
          - сообщения о фатальных ошибках.


Информационные сообщения

Турбо Ассемблер обычно выводит два информационных сообщения. Во-первых, всегда выдается информационное сообщение непосредс- твенно перед началом ассемблирования пользовательского исходного файла (или файлов). Кроме того, выдается информационное сообщение по окончании ассемблирования каждого файла. Пример информационно- го сообщения, выдаваемого при запуске Турбо Ассемблера: Turbo Assembler Version 3.0 Copyright(C) 1991 Borland International Assembling file: TEST.ASM (Турбо Ассемблер, версия 3.0, продукт фирмы Borland, 1991г.) По окончании ассемблирования исходного файла выдается сооб- щение с краткой характеристикой процесса ассемблирования. Это со- общение выглядит следующим образом: Error messages: None Warning messages: None Passes: 1 Remaining memory: 279K (Сообщения об ошибках: Нет Проходов: 1 Предупреждающие сообщения: Нет Осталось памяти: 279Кб) Подавить все информационные сообщения можно с помощью пара- метра командной строки /T. Информационные сообщения подавляются только в случае отсутствия ошибок в процессе ассемблирования. При наличии ошибок параметр /T никакого влияния не имеет: стандартные информационные сообщения будут выданы в начале и в конце процесса ассемблирования.

Предупреждающие сообщения и сообщения об ошибках

Предупреждающие сообщения выдаются для информирования поль- зователей о возможных нежелательных последствиях ассемблирования оператора исходного файла. Предупреждающее сообщение выдается, например, в тех случаях, когда использование Turbo Assembler ка- кого-либо, вообще говоря, допустимого умолчания может привести к некорректным результатам. Рекомендуется обязательно проанализиро- вать причины предупреждающих сообщений, чтобы не допустить гене- рации неверного кода. Наличие этих сообщений не влияет на генера- цию объектного кода Turbo Assembler. Предупреждающие сообщения имеют следующий формат: **Warning** имя_файла(номер_строки) сообщение Если предупреждающее сообщение выдается во время расширения макрокоманды или блока повторения, то оно будет содержать допол- нительную информацию: имя макрокоманды и номер строки, при ас- семблировании которой возникло это сообщение. Предупреждающее со- общение в этом случае имеет следующий формат: **Warning** имя_файла(номер_строки) имя_макрокоманды(номер_строки_в_макрокоманде)сообщение В отличие от предупреждающих сообщений, появление сообщений об ошибках означает, что объектный код Турбо Ассемблер генериро- вать не будет, хотя процесс ассемблирования будет доведен до кон- ца. Типичное сообщение об ошибке имеет следующий формат: **Error** имя_файла(номер_строки) сообщение Если сообщение об ошибке выдается во время расширения макро- са или блока повтора, то оно будет содержать дополнительную ин- формацию: имя макрокоманды и номер строки, при ассемблировании которой возникло это сообщение. Сообщение об ошибке в этом случае имеет следующий формат: **Error** имя_файла(номер_строки) имя_макрокоманды(номер_строки_в_макрокоманде)сообщение Далее в алфавитном порядке приводятся тексты предупредитель- ных сообщений и сообщений об ошибках:

32-bit segment not allowed without .386

(32-битовые флаги без директивы .386 не допускаются) Это средство расширено. Теперь в операторе .MODEL можно за- давать USE32 и LARGESTACK. Ранее это было сообщение "USE32 not allowed without .386").

Argument needs type override

(Требуется явно указать тип операнда) Требуется явно указать размер, или тип, выражения, т.к. он не может быть определен из контекста. Например, ошибочной являет- ся следующая команда: mov [bx],1 Ошибки такого рода обычно корректируются с помощью операции PTR, позволяющей установить размер операнда: mov WORD PTR[bx],1

Argument to operation or instruction has illegal size

(Операнд операции или команды имеет недопустимый размер) В операции указан операнд, имеющий тип, недопустимый для данной операции. Например: Q LABEL QWORD QNOT = NOT Q ; операнд операции отрицания не может ; иметь тип QWORD

Arithmetic overflow

(Арифметическое переполнение) Потеря значащих цифр при вычислении значения выражения. Нап- ример: X = 20000h * 20000h ; результат занимает более 32 бит Точность всех арифметических операций - 32 бита.

ASSUME must be segment register

(В директиве ASSUME должен быть указан сегментный регистр) В директиве ASSUME можно указывать только сегментные регист- ры, во всех остальных случаях выводится данное сообщение об ошиб- ке. Например, ошибочной является директива: ASSUME ax:CODE

Bad keyword in SEGMENT statement

(Неверное ключевое слово в операторе SEGMENT) Один из параметров директивы SEGMENT: тип выравнивания, тип объединения или тип сегмента имеет недопустимое значение. Напри- мер: DATA SEGMENT PAFA PUBLIC ; вместо PARA указано PAFA

Can't add relative quantities

(Нельзя складывать относительные адреса) Выражение содержит операцию сложения двух адресов, что явля- ется бессмысленной операцией. Например: ABC DB ? DEF = ABC + ABC ; ошибка: нельзя складывать ; два относительные адреса Можно вычитать относительные адреса. Можно добавить констан- ту к относительному адресу, например: XYZ DB 5 DUP(0) XYZEND EQU $ XYZLEN = SYZEND - XYZ ; совершенно верно XYZ2 = XYZ + 2 ; тоже верно

Can't address with currently ASSUMEd segment registers

(Невозможна адресация из текущих, установленных директивой ASSUME, сегментных регистров) В выражении содержится ссылка на переменную, для доступа к которой не специфицирован сегментный регистр. Например: DSEG SEGMENT ASSUME ds:DSEG mov si,MPTR ; не определен сегментный регистр, который ; обеспечил бы доступ к сегменту XSEG DSEG ENDS XSEG SEGMENT MPTR DW ? XSEG ENDS

Can't convert to pointer

(Невозможно преобразование в указатель) Часть выражения не может быть преобразована в указатель на память, например, с помощью операции PTR: mov cl,[BYTE PTR al] ; AL нельзя преобразовать ; в указатель

Can't emulate 8087 instruction

(Невозможна эмуляция команд сопроцессора 8087) В Турбо Ассемблере параметром командной строки /E либо с по- мощью директивы EMUL установлен режим генерации эмулированных ко- манд арифметики с плавающей точкой, однако текущая команда не мо- жет быть эмулирована. Например: EMUL FNSAVE [WPTR] ; эта команда не может быть эмулирована Некоторые команды не поддерживаются эмуляторами арифметики с плавающей точкой. Это команды FNSAVE, FNSTCW, FNSTENV и FNSTSW.

Can't make variable public

(Переменная не может быть объявлена как PUBLIC) Переменная была уже ранее объявлена таким образом, что уже не может быть определена как общая (PUBLIC). Например: EXTRN ABC:NEAR PUBLIC ABC ; ошибка: ABC уже ранее объявлена ; с атрибутом EXTRN

Can't override ES segment

(Нельзя переопределить сегмент ES) В текущем операторе указан регистр, использование которого в данной команде недопустимо. Например: STOS DS:BYTE PTR[di] В команде STOS для определения целевого адреса допускается использовать только регистр ES.

Can't subtract dissimilar relative quantities

(Недопустимое вычитание относительных адресов) Выражение содержит операцию вычитания двух адресов, которая для данных адресов является недопустимой. Данное сообщение выда- ется, например, в том случае, если адреса находятся в разных сег- ментах. Например: SEG1 SEGMENT A: SEG1 ENDS SEG2 SEGMENT B: mov ax,B-A ; недопустимо, поскольку A и В находятся ; в разных сегментах SEG2 ENDS

Can't use macro name in expression

(Недопустимо использование имени макрокоманды в качестве операнда выражения) Имя макрокоманды указано в качестве операнда выражения. Нап- ример: MyMac MACRO ENDM mov ax,MyMac ; ошибка!

Can't use this outside macro

(Использование данного оператора недопустимо вне макроопре- деления) Вне макроопределения указана директива, которую допускается использовать только внутри макроопределений. К таким директивам относятся, например, ENDM и EXITM. Например: DATA SEGMENT ENDM ; ошибка: вне макроопределения недопустимо

Code or data emission to undeclared segment

(Не объявлен сегмент для кода или данных) Оператор, генерирующий код или данные, не принадлежит ни од- ному из сегментов, объявленных директивами SEGMENT. Например: ; Первая строка файла inc bx ; ошибка: не определен сегмент END Генерировать данные или код можно только внутри какого-либо сегмента.

Constant assumed to mean Immediate const

(Константа интерпретируется как непосредственная) Это предупреждающе сообщение выдается для выражений типа [0]. В режиме MASM это выражение интерпретируется как непосредс- твенная константа, равная 0. Например: mov ax,[0]; означает mov ax,0, а не mov ax,ds:[0]

Constant too large

(Слишком большая константа) Константа имеет, вообще говоря, правильный формат, однако ее значение превышает допустимую для данного режима величину. Напри- мер, числа, большие 0ffffh, можно использовать, если только ди- рективой .386/.386P или .486/.486Р разрешены команды процессора 386 или i486.

CS not correctly assumed

(Некорректное значение в регистре CS) Адрес назначения в командах ближнего вызова и ближнего пере- хода не может находиться в другом сегменте. Например: SEG1 SEGMENT LAB1 LABEL NEAR SEG1 ENDS SEG2 SEGMENT JMP LAB1 ; ошибка: неверный сегментный адрес SEG2 ENDS Такие ошибки возникают только в режиме MASM. В режиме Ideal такие переходы и вызовы интерпретируются корректно.

CS override in protected mode

(Переопределение регистра CS в защищенном режиме) В защищенном режиме ассемблирования команд процессора 286, 386 или i486, установленном директивой Р286Р, P386P или Р486Р, в текущей команде требуется переопределение регистра CS. Например: P286 .CODE CVAL DW ? mov CVAL,1 ; генерирует переопределение регистра CS Это предупреждающее сообщение выдается, если в командной строке указан параметр /Р. В защищенном режиме команды, в которых переопределяется регистр CS, не будут выполняться без специальных подготовительных операций.

CS unreachable from current segment

(CS недостижим из текущего сегмента) При определении метки кода с помощью двоеточия (:) или с по- мощью директив LABEL или PROC сегментный регистр не указывает на текущий кодовый сегмент или группу, содержащую текущий кодовый сегмент. Например: PROG1 SEGMENT ASSUME CS:PROG2 START: ; ошибка: неверно установлен регистр CS Такие ошибки возникают только в режиме MASM. В режиме Ideal такие переходы и вызовы обрабатываются корректно.

Declaration needs name

(В директиве объявления не указано имя) Не указано имя идентификатора в директиве, для которой спе- цификация имени является обязательной. Например: PROC ; ошибка: в директиве PROC указание имени обязательно ret ENDP В директивах объявления, таких как SEGMENT, PROC или STRUC, обязательно должно быть указано имя идентификатора. В режиме MASM имя указывается перед именем директивы, а в режиме Ideal - после имени директивы.

Directive ignored in Turbo Pascal model

(В режиме TPASCAL директива игнорируется) В модуле Ассемблера, предназначенном для интерфейса с Турбо Паскалем, используется недопустимая директива. Режим интерфейса с Турбо Паскалем специфицируется директивой .MODEL. Более подробно интерфейс с Турбо Паскалем обсуждается в Главе 19.

Directive not allowed inside structure definition

(Недопустимая директива внутри определения структуры) Внутри блока определения структуры указана недопустимая ди- ректива. Например: X STRUC MEM1 DB ? ORG $+4 ; ошибка: директиву ORG нельзя указывать ; внутри структуры MEM2 DW ? ENDS При определении вложенных структур нельзя определять новые структуры на внутренних уровнях. Например: F00 STRUC F002 STRUC ; ошибка: определена новая структура ENDS ENDS Для того чтобы использовать одну структуру внутри другой структуры, нужно сначала определить первую структуру, а после этого во второй структуре можно указывать имя первой.

Duplicate dummy arguments:_

(Недопустимо использование одинаковых имен для формальных параметров) В директиве MACRO определено несколько формальных параметров с одинаковыми именами. Например: XYZ MACRO A,A ; ошибка: дублируются имена ; формальных параметров DB A ENDM Все формальные параметры макроопределения должны иметь раз- личные имена.

ELSE or ENDIF without IF

(ELSE или ENDIF без IF) Для директивы ELSE или ENDIF нет парной директивы IF, обоз- начающей начало условно ассемблируемого блока. Например: BUF DB 10 DUP(?) ENDIF ; ошибка: нет парной директивы IFxxx

Expecting METHOD keyword

(Требуется ключевое слово METHOD) В расширенном структурном операторе для определения объектов после порождающего объекта требуется ключевое слово METHOD.

Expecting offset quantity

(Требуется указать величину смещения) В качестве операнда выражения указано неверное значение вместо ожидаемого смещения внутри сегмента. Например: CODE SEGMENT mov ax,LOW CODE CODE ENDS

Expecting offset or pointer quantity

(Требуется указать смещение или указатель) В качестве операнда выражения указано неверное значение вместо ожидаемого смещения внутри специфицированного сегмента. Например: CODE SEGMENT mov ax,SEG CODE ; ошибка: СODE - это сегмент, ; а не адрес внутри сегмента CODE ENDS

Expecting pointer type

(Операнд должен быть указателем) Операндом текущей команды должен быть адрес памяти. Напри- мер: LES di,4 ; неверно, т.к. 4 - константа

Expecting record field name

(Требуется имя поля записи) Вы использовали инструкцию SETFIELD или GETFIELD без после- дующего имени поля.

Expecting register ID

(Требуется идентификатор регистра) В части USES оператору CALL.METHOD требуются имена регист- ров.

Expecting scalar type

(Операнд должен быть константой) Операндом текущей команды должна быть константа. Например: BB DB 4 rol ax,BB ; ошибка: вторым операндом операции ROL ; должна быть константа

Expecting segment or group quantity

(Должно быть указано имя сегмента или группы) В операторе вместо имени сегмента или группы указано имя, которое таковым не является. Например: DATA SEGMENT ASSUME ds:F00 ; ошибка: F00 не является именем ; сегмента или группы F00 DW 0 DATA ENDS

Extra characters on line

(Лишние символы в строке) Выражение имеет корректный синтаксис, однако вслед за ним, на той же строке имеются еще лишние символы. Например: ABC = 4 shl 3 3 ; нет знака операции ; между двумя тройками Данная ошибка обычно является следствием другой ошибки, в результате которой анализатор выражений преждевременно заканчива- ет обработку выражения.

Forward reference needs override

(Ошибка при использовании умолчания для ссылки вперед) В результате использования умолчания для ссылки вперед было зарезервировано меньше памяти, чем это оказалось необходимо. Эта ошибка возникает тогда, когда имя идентификатора, по умолчанию означающее адрес ближнего перехода или вызова, переопределяется в программе как дальний адрес. Эта ошибка возникает также в тех случаях, когда не указан сегмент (отличный от предполагаемого по умолчанию) для доступа к переменной. Например: ASSUME cs:DATA call A ; по умолчанию - ближний вызов A PROC FAR ; а здесь переопределяется как дальний mov ax,MEMVAR ; не известно, что требуется другой сегмент DATA SEGMENT MEMVAR DW ? ; здесь ошибка: требуется переопределение Эти ошибки исправляются путем явного указания сегмента или типа перехода FAR.

Global type doesn't match symbol type

(Тип, указанный в директиве GLOBAL не совпадает с действи- тельным типом имени идентификатора) Это предупреждающее сообщение выдается, если объявление сим- волического имени директивой GLOBAL находится в том же самом сег- менте, где определяется это имя идентификатора, однако тип, ука- занный в директиве GLOBAL, не совпадает с действительным типом этого имени идентификатора.

ID not member of structure

(Идентификатор не является полем структуры) В режиме Ideal после точки (селектора поля структуры) указа- но имя идентификатора, которое не является именем поля структуры. Например: IDEAL STRUC DEMO DB ? ENDS COUNT DW 0 mov ax,[(DEMO bx).COUNT] ; COUNT не является ; полем структуры После точки может быть указано только имя поля той структу- ры, имя которой указано перед точкой. Данная ошибка обычно является следствием другой ошибки, в результате которой анализатор выражений преждевременно заканчива- ет обработку выражения.

Illegal forward reference

(Недопустимая ссылка вперед) Имя идентификатора, на которое происходит ссылка, еще не бы- ло определено, а в соответствующей директиве не допускается ис- пользовать ссылки вперед. Например: IF MYSYM ; ошибка: MYSYM еще не определена ; ENDIF MYSYM EQU 1 Ссылки вперед нельзя использовать в директивах вида IFxxx, а также в качестве счетчика выражений в операции DUP.

Illegal immediate

(Недопустим непосредственный операнд) Команда содержит непосредственный операнд (т.е. константу) там, где он недопустим. Например: mov 4,al

Illegal indexing mode

(Недопустимый режим индексации) Команда содержит операнд, использующий недопустимую комбина- цию регистров. Например: mov al,[si+ax] Для всех процессоров, за исключением 80386, допустимыми ком- бинациями индексных регистров являются следующие: BX, BP, SI, DI, BX+SI, BX+DI, BP+SI, BP+DI.

Illegal instruction

(Недопустимая команда) Строка исходной программы начинается с имени идентификатора, которое не является ни именем директивы, ни мнемоникой команды. Например: move ax,4 ; должно быть "MOV"

Illegal instruction for currently selected processor(s)

(Недопустимая команда для выбранного в настоящий момент про- цессора (процессоров)) Строка программы содержит команду, которая не может быть ас- семблирована текущим процессором. Например: .8086 PUSH 1234h ; занесение в стек непосредственного ; операнда для процессора 8086 не ; допускается При ассемблировании исходного файла с помощью Турбо Ассемб- лера по умолчанию будут разрешены команды процессора 8086. Если желательно использовать расширенные мнемоники команд, определен- ные для процессоров 186/286/386, то должна быть указана одна из директив, разрешающих использование этих команд (Р186, Р286, Р386).

Illegal local argument

(Недопустимый локальный параметр) В директиве LOCAL внутри макроопределения указан параметр, не являющийся допустимым именем идентификатора. Например: X MACRO LOCAL 123 ; это не идентификатор ENDM

Illegal local symbol prefix

(Недопустимый префикс для локальных имен идентификаторов) В директиве LOCALS специфицируется недопустимый префикс для локальных имен идентификаторов. Например: LOCALS XYZ ; ошибка: допускается только 2 символа Префикс локальных идентификаторов должен состоять ровно из двух символов и представлять собой допустимое имя идентификатора. Например, допустимыми являются следующие комбинации: __, @@ (по умолчанию для локальных имен идентификаторов используется префикс @ @).

Illegal mаcro argument

(Недопустимый параметр макрокоманды) В директиве MACRO для формального параметра макрокоманды указано недопустимое имя идентификатора. Например: X MACRO 123 ; недопустимый формальный параметр ENDM

Illegal memory reference

(Недопустима ссылка на память) Операнд команды содержит ссылку на адрес памяти, что недо- пустимо для данного операнда. Например: mov [bx],BYTE PTR A ; ошибка: недопустима пересылка ; из памяти в память В данной команде оба операнда представляют собой адреса па- мяти, что недопустимо в команде mov. В командах семейства процес- соров 80х86 только один из операндов может ссылаться на адрес па- мяти.

Illegal number

(Недопустимое число) Число содержит один или более символов, недопустимых для чи- сел данного формата. Например: Z = 0ABCGH Здесь G - недопустимый символ для шестнадцатиричных чисел.

Illegal origin address

(Недопустимый начальный адрес) Указан адрес, недопустимый для установки текущего сегментно- го адреса ($). Допускается указывать константу, выражение, ис- пользующее счетчика адреса ($), или имя идентификатора из текуще- го сегмента.

Illegal override in structure

(Недопустимое переопределение в структуре) Попытка инициализировать элемент структуры, определенный с помощью операции DUP. Инициализировать можно только те члены, ко- торые были объявлены без использования операции DUP.

Illegal override register

(Недопустимое переопределение регистра) В ссылке на сегмент перед двоеточием был указан регистр, не являющийся сегментным регистром. К сегментным регистрам относятся следующие регистры: CS, DS, ES, SS, а также FS и GS для процессо- ра 80386. Например: mov dx:XYZ,1 ; DX не является сегментным регистром

Illegal radix

(Недопустимое основание системы счисления) В директиве .RADIX в качестве основания системы счисления указано недопустимое число. Например: .RADIX 7 ; неверно Основанием системы счисления могут быть следующие числа: 2, 8, 10 и 16. Это число интерпретируется как десятичное, независимо от текущего умолчания для основания системы счисления.

Illegal register for instruction

(Недопустимый регистр в инструкции) В качестве источника в инструкции SETFIELD и GETFIELD ис- пользован недопустимый регистр.

Illegal register multiplier

(Недопустимо указание множителя для регистра) Попытка умножить регистр на какое-либо число, что является недопустимой операцией. Например: mov ax * 3,1 Единственный случай, когда допускается умножение регистра на константное выражение - это при определении масштабного индексно- го операнда для процессора 80386.

Illegal segment address

(Недопустимый сегментный адрес) Это сообщение об ошибке выдается, если для позиционирования сегмента указывается значение адреса, превышающее 65535. Напри- мер: F00 SEGMENT AT 12345h

Illegal use of constant

(Недопустимо использование константы) В выражении используется константа там, где использование константы недопустимо. Например: mov bx+4,5

Illegal use of register

(Недопустимо использование регистра) В выражении указывается имя регистра там, где использование регистра недопустимо. Например: X = 4 shl ax ; в операции SHL нельзя указывать регистры

Illegal use of segment register

(Недопустимо использование сегментного регистра) В выражении или команде указывается имя сегментного регистра там, где использование сегментного регистра недопустимо. Напри- мер: ADD SS,4 ; в команде ADD нельзя указывать ; сегментные регистры

Illegal USES register

(В директиве USES указан недопустимый регистр) Указан недопустимый регистр в командах PUSH и POP при входе и выходе из процедуры. Допустимы следующие регистры: AX CX DS ES BX DI DX SI Если директивой .386 или .386Р разрешены команды процессора 80386, то можно указывать 32-битовые эквиваленты перечисленных выше сегментов.

Illegal version ID

(Недопустимый идентификатор версии) Эта ошибка происходит, когда в параметре /U или в операторе VERSION выбирается недопустимая версия.

Illegal warning ID

(Недопустимый идентификатор предупреждающего сообщения) Введен неверный трехсимвольный идентификатор предупреждающе- го сообщения. Список всех допустимых идентификаторов предупрежда- ющих сообщений приведен в Главе 2.

Instruction can be compacted with override

(Возможно сокращение длины команды, если явно указать тип имени) Из-за наличия ссылки вперед на имя идентификатора генерируе- мый код содержит дополнительные команды NOP. Для того чтобы сок- ратить код можно убрать ссылку вперед либо явно указать тип сим- волического имени. Например: jmp X ; для этой команды будет выдано предупреждающее ; сообщение jmp SHORT X ; не будет выдано предупреждающего сообщения Х:

Invalid model type

(Недопустимая модель памяти) В директиве .MODEL для модели памяти указано недопустимое ключевое слово. Например: .Model GIGANTIC Для обозначения моделей памяти допустимы следующие ключевые слова: TINY, SMALL, COMPACT, MEDIUM, LARGE и HUGE.

Invalid operand(s) to instruction

(Недопустимый операнд(ы) для данной команды) В команде указана недопустимая комбинация операндов. Напри- мер: FADD ST(2), ST(3) В команде FADD только на один стековый регистр можно ссы- латься по имени, другой операнд должен быть вершиной стека.

Labels can't start with numeric characters

(Метки не могут начинаться с цифровых символов) Обнаружено имя, которое не является ни допустимым числом, ни допустимым именем идентификатора. Например: 123XYZ.

Line too long - truncated

(Строка слишком длинная - производится усечение) Текущая строка исходного файла содержит более 255 символов. Лишние символы игнорируются.

Location counter overflow

(Переполнение счетчика адреса) Текущий сегмент заполнен, последующий код или данные затрут начало сегмента. Например: ORG 0FFF0h ARRAY DW 20 DUP (0) ; переполнение

Method call requires object name

(В вызове метода необходимо имя объекта) Оператор CALL.METHOD не может получить тип объекта из эк- земпляра указателя. Вы должны указать имя объекта.

Missing argument list

(Отсутствует список аргументов) В директиве IRP или IRPC, определяющей блок повторения, не указан список аргументов для формального параметра. Например: IRP X ; нет списка аргументов DB X ENDM В директивах IRP и IRPC обязательно должен быть указан фор- мальный параметр и список аргументов.

Missing argument or <

(Отсутствует аргумент, либо не указана угловая скобка <) Не указаны угловые скобки, либо вообще отсутствует выражение в угловых скобках там, где оно необходимо. Например: if b ; должно быть указано выражение в угловых ; скобках

Missing argument size variable

(Отсутствует переменная для размера блока параметров) В директиве ARG или LOCAL не указано имя идентификатора пос- ле знака равенства в конце оператора. Например: ARG A:WORD,B:DWORD= ; ошибка, нет имени после знака= LOCAL X:TBYTE= ; та же ошибка В директивах ARG и LOCAL после знака равенства, если он ука- зан, обязательно должно быть указано имя переменной для размера блока параметров.

Missing COMM ID

(Отсутствует идентификатор в директиве COMM) В директиве COMM не указано имя идентификатора перед специ- фикатором типа. Например: COMM NEAR ; ошибка: отсутствует ; имя идентификатора перед "NEAR" В директиве СОММ обязательно должно быть указано имя иденти- фикатора. Имя идентификатора и спецификатор типа должны быть раз- делены двоеточием (:).

Missing dummy argument

(Отсутствует формальный параметр) В директиве IRP или IRPC, определяющей блок повтора, отсутс- твует формальный параметр. Например: IRP DB X ; нет формального параметра ENDM В директивах IRP и IRPC обязательно должны быть указаны фор- мальный параметр и список аргументов.

Missing end quote

(Отсутствует закрывающая кавычка) В конце строковой константы нет закрывающей кавычки. Напри- мер: DB "abc ; отсутствует кавычка в конце ABC mov al,'X ; отсутствует кавычка после Х Строковая константа должна оканчиваться той же кавычкой, ко- торой она начинается.

Missing macro ID

(Отсутствует идентификатор макрокоманды) В директиве MACRO, определяющей макрокоманду, отсутствует имя. Например: MACRO ; ошибка: не указано имя макрокоманды DB A ENDM Имя в определении макрокоманды указывать обязательно.

Missing module name

(Отсутствует имя модуля) В директиве NAME не указано имя модуля. Напомним, что дирек- тива NAME действует только в режиме Ideal.

Missing or illegal language ID

(Отсутствует или неверно указан идентификатор языка) В директиве .MODEL неверно указан идентификатор языка. Под- робное описание директивы MODEL см. в Главе 7 настоящего руко- водства.

Missing or illegal type specifier

(Отсутствует или неверно указан спецификатор типа) В операторе отсутствует или неверно указан обязательный па- раметр - идентификатор типа (BYTE, WORD и т.д.) Например: RED LABEL XXX ; ошибка: "ХХХ" не является ; идентификатором типа

Missing table member ID

(Пропущен идентификатор элемента таблицы) В операторе CALL.METHOD после ключевого слова METHOD пропущено имя объекта.

Missing term in list

(Отсутствует член в списке параметров) В режиме Ideal в директиве, допускающей указание нескольких параметров (такой как EXTRN, PUBLIC и т.д.), отсутствует параметр после одной из запятых, отделяющих параметры друг от друга. Нап- ример: EXTRN XXX:BYTE,,YYY:WORD В режиме Ideal параметры в любом списке всегда разделяются только одной запятой, в конце списка запятой быть не должно.

Missing text macro

(Отсутствует текстовая макрокоманда) В директиве не указан обязательный параметр - текстовая мак- рокоманда. Например: NEWSTR SUBSTR ; для SUBSTR должны быть ; указаны параметры

Model must be specified first

(Сначала должна быть указана модель памяти) Использована одна из упрощенных сегментных директив без предварительной спецификации модели памяти. Например: .CODE ; ошибка: сначала нужно указать директиву ; .MODEL Перед использованием упрощенных сегментных директив должна быть указана с помощью директивы .MODEL модель памяти.

Module is pass-dependant - compatibility pass was done

(Модуль зависит от прохода. Выполнен проход, обеспечивающий совместимость с MASM) Это предупреждающее сообщение выдается, если обнаружена конструкция, зависящая от прохода, и в командной строке указан параметр /m. В этом случае выполняется проход, обеспечивающий совместимость с MASM.

Name must come first

(Имя должно быть указано первым) Имя идентификатора указано после названия директивы, тогда когда оно должно находиться перед названием директивы. Например: STRUC ABC ; ошибка: "ABC" должно стоять перед ; ключевым словом STRUC В режиме Ideal имя идентификатора указывается после названия директивы, поэтому эта ошибка часто возникает при попытках ас- семблирования в режиме MASM программ, предназначенных для работы в режиме Ideal.

Near jump or call to different CS

(Адресат ближнего перехода или вызова находится в другом ко- довом сегменте) Это сообщение об ошибке выдается при попытке осуществить ближний вызов или переход по адресу, определенному в области, где регистр CS указывает на другой сегмент.

Need address or register

(Требуется указать адрес или регистр) Не указан второй операнд команды, т.е. операнд указываемый после запятой. Например: mov ax, ; нет второго операнда

Need angle brackets for structure fill

(Значения для структуры должны указываться в угловых скоб- ках) В операторе выделения памяти под структуру не указан список начальных значений. Например: STR1 STRUC M1 DW ? M2 DD ? ENDS STR1 ; нет списка начальных значений

Need colon

(Требуется двоеточие) В директиве EXTRN, GLOBAL, ARG и LOCAL отсутствует двоеточие перед спецификатором типа (BYTE, WORD и т.д.) Например: EXTRN X BYTE,Y:WORD ; после Х нет двоеточия

Need expression

(Требуется указать выражение) Выражение содержит операцию, для которой не указан операнд. Например: Х = 4 + * 6

Need file name after INCLUDE

(В директиве INCLUDE должно быть указано имя файла) В директиве INCLUDE не указано имя файла. Например: INCLUDE ; не указано, какой файл должен быть включен В режиме Ideal имя файла должно быть заключено в кавычки.

Need left parenthesis

(Отсутствует левая круглая скобка) Опущена левая круглая скобка там, где это не допускается синтаксисом выражения. Например: DB 4 DUP 7 Выражение в операции DUP обязательно должно быть заключено в круглые скобки.

Need method name

(Требуется имя метода) Оператор CALL.METHOD требует после ключевого слова METHOD имени метода.

Need pointer expression

(Требуется выражение-указатель) Эта ошибка возникает только в режиме Ideal и указывает, что выражение в квадратных скобках ([]) не является указателем на па- мять. Например: mov ax,[word ptr] В режиме Ideal в квадратных скобках допускается указывать только адресные выражения.

Need quoted string

(Требуется указать строку в кавычках) Ошибка при вводе параметра директивы, который должен предс- тавлять собой строку, заключенную в кавычки. В режиме Ideal для ряда директив в качестве параметра указывается строка в кавычках. Например: Ideal DISPLAY "Все сделано"

Need register in expression

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

Need right angle bracket

(Отсутствует правая угловая скобка) Выражение, используемое для инициализации структуры, объеди- нения или записи, не оканчивается правой угловой скобкой (>) - парной для левой угловой скобки, указывающей начало списка на- чальных значений. Например: MYSTRUC STRUCNAME <1,2,3

Need right curly bracket

(Требуется правая фигурная скобка) Эта ошибка возникает в структуре, таблице или записи, когда ожидается }, но она не найдена.

Need right parenthesis

(Отсутствует правая круглая скобка) Выражение содержит левую круглую скобку без парной ей правой угловой скобки. Например: Х = 5 * (4 + 3 В выражениях обязательно должно соблюдаться соответствие ле- вых и правых круглых скобок.

Need right square bracket

(Отсутствует правая квадратная скобка) Выражение, представляющее собой ссылку на память, указано без правой квадратной скобки, которая должна соответствовать отк- рывающей левой квадратной скобке, обозначающей начало выражения. Например: mov ax,[SI ; ошибка: нет закрывающей ; скобки (]) после SI В выражениях обязательно должно соблюдаться соответствие ле- вых и правых квадратных скобок.

Need stack argument

(Не указан стековый параметр) В команде арифметики с плавающей запятой не указан второй операнд, т.е. операнд, указываемый после запятой. Например: FADD ST,

Need structure member name

(Не указано имя поля структуры) В режиме Ideal после селектора поля структуры (т.е. после точки) не указано имя поля этой структуры. Например: Ideal STRUC DEMO DB ? ENDS COUNT DW 0 mov,[(DEMO bx).] При обращении к полю структуры справа от точки обязательно должно быть указано поле той структуры, имя которой стоит слева от точки.

Not expecting group or segment quantity

(Использование имени группы или сегмента недопустимо) Указано имя группы или сегмента там, где это недопустимо. Например: CODE SEGMENT rol ax,CODE ; ошибка: здесь нельзя указывать ; имя сегмента

One non-null field allowed per union expansion

(При расширении объединения допускается указывать только од- но поле непустым) При инициализации объединения, определенного директивой UNION, указано более одного значения. Например: U UNION DW ? DD ? ENDS UINST U <1,2> ;ошибка: можно указать <?,2> либо <1,?> В объединении можно инициализировать только одно поле.

Only one startup sequence allowed

(Допускается только одна директива генерации кода инициали- зации) Это сообщение выдается, если в модуле указано более одной директивы .STARTUP или STARTUPCODE.

Open conditional

(Открытый условный блок) Обнаружена директива END, означающая конец исходного файла. Однако условно ассемблируемый блок, открытый одной из директив вида IFxxx, не был закрыт директивой ENDIF. Например: IF BIGBUF END ; нет директивы ENDIF перед директивой END Эта ошибка обычно выдается, если вместо директивы окончания условного блока ENDIF, ошибочно указана директива END.

Open procedure

(Открытая процедура) Обнаружена директива END, означающая конец исходного файла. Однако блок описания процедуры, открытый директивой PROC, не был закрыт директивой ENDР. Например: MYFUNC PROC END ; нет директивы ENDР перед директивой END Эта ошибка обычно выдается, если вместо директивы конца бло- ка процедуры - ENDP ошибочно указана директива END.

Open segment

(Открытый сегмент) Обнаружена директива END, означающая конец исходного файла. Однако сегмент, открытый директивой SEGMENT, не был закрыт дирек- тивой ENDS. Например: DATA SEGMENT END ; нет директивы ENDS перед директивой END Эта ошибка обычно выдается, если вместо директивы конца сег- мента - ENDS ошибочно указана директива END.

Open structure definition

(Не указан конец определения структуры) Обнаружена директива END, означающая конец исходного файла. Однако определение структуры, начало которой указано директивой STRUCTURE, не было завершено директивой ENDS. Например: X STRUC VAL1 DW ? END ; нет директивы ENDS перед директивой END Эта ошибка обычно выводится, если вместо директивы конца структуры ENDS ошибочно указана директива END.

Operand types do not match

(Не совпадают типы операндов) Тип одного из операндов команды не совпадает с типом другого операнда либо не является допустимым для данной команды. Напри- мер: ABC DB 5 . mov ax,ABC

Operation illegal for static table member

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

Pass-dependant construction encountered

(Обнаружена конструкция, зависящая от прохода) Действие оператора возможно не совпадает с ожидаемым из-за однопроходности Турбо Ассемблера. Например: IF1 ; на шаге ассемблирования ENDIF IF2 ; на шаге листинга ENDIF Большинство конструкций, с которыми связано это сообщение, может быть скорректировано так, чтобы это сообщение исчезло. Обычно для этого достаточно убрать ссылки вперед.

Pointer expression needs brackets

(Адресное выражение должно быть заключено в квадратные скоб- ки) В режиме Ideal операнд, содержащий имя идентификатора, представляющее собой ссылку на память, не заключен в квадратные скобки. В режиме Ideal квадратные скобки означают ссылку на адрес памяти. Например: B DB 0 mov al,B ; предупреждение: в режиме Ideal ; должно быть указано [B] Т.к. в режиме MASM квадратные скобки не обязательны, то это сообщение выдается как предупреждающее.

Positive count expecting

(Счетчик должен быть положительным) В выражении для DUP в качестве счетчика повторений указано отрицательное число. Например: BUF -1 DUP (?) ; ошибка: отрицательный счетчик Счетчик в операции DUP должен быть равен или больше 1.

Record field too large

(Слишком длинное поле в записи) В определении записи сумма длин всех полей превышает 32 би- та. Например: AREC RECORD RANGE:12,TOP:12,BOTTOM:12

Record member not found

(Не найден статический элемент записи) Элемент записи задан в заполнителе указанной записи, который не является частью заданной записи.

Recursive definition not allowed for EQU

(Рекурсивное определение не допустимо в директиве EQU) В выражении директивы EQU содержится то же самое имя, кото- рое определяется этой директивой. Например: ABC EQU TWOTIMES ABC

Register must be AL or AX

(Допустимо указание только регистра AL или AX) Неверен операнд команды. Допускается использовать только ре- гистры AL и AX. Например: IN CL,dx ; ошибка: в первом операнде команды IN ; допускается указывать только регистры AL и AX

Register must be DX

(Допустимо указание только регистра DX) Неверен операнд команды. Допускается использовать только ре- гистр DX. Например: IN AL,cx ; ошибка: вместо СХ должен быть указан регистр DX

Relative jump out of range by __ bytes

(Адрес назначения условного перехода превышает допустимый предел на __ байт) Адрес назначения в команде условного перехода находится вне допустимого диапазона, т.е. не принадлежит интервалу (-127, +128) от текущего адреса. В 32-битовом сегменте адрес назначения услов- ного перехода должен находиться в диапазоне от -32767 до +32768 байт от текущего адреса.

Relative quantity illegal

(Недопустимый относительный адрес) Команда или директива содержит операнд, ссылающийся на адрес памяти таким способом, что эта ссылка не может быть разрешена на этапе ассемблирования. Такие ссылки в Турбо Ассемблере являются недопустимыми. Например: DATA SEGMENT PUBLIC X DB 0 IF OFFSET X GT 127 ; на этапе ассемблирования ; адрес не известен

Reserved word used as symbol

(Зарезервированное слово используется в качестве имени иден- тификатора) В программе пользователя определяется имя идентификатора, совпадающее с одним из зарезервированных слов Турбо Ассемблера. Программа будет ассемблироваться правильно, однако переопределять зарезервированные в Турбо Ассемблере слова не рекомендуется.

Rotate count must be constant or CL

(Счетчик в командах сдвига должен быть указан с помощью константы или регистра CL) В команде сдвига или циклического сдвига указан операнд, от- личный от константы и регистра CL. Например: ROL ax,DL ; ошибка: регистр DL нельзя указывать ; в качестве счетчика В командах сдвига и циклического сдвига в качестве второго операнда можно указывать только константу или регистр CL.

Rotate count out of range

(Недопустимое значение для счетчика сдвига) В команде сдвига или циклического сдвига второй операнд пре- вышает допустимое значение. Например: .8086 SHL DL,3 ; ошибка: в командах процессора 8086 ; возможен сдвиг только на один разряд .286 ROR ax,40 ; ошибка: максимальное допустимое ; значение для счетчика сдвига равно 31 Максимальное допустимое значение для счетчика сдвига в ко- мандах процессора 8086 равно 1, для других процессоров это значе- ние может быть равно 31.

Segment alignment not strict enough

(Выравнивание сегмента не достаточно точное) Указано недопустимое значение для границы выравнивания сег- мента. Либо оно не является степенью двойки, либо специфицирует более точное выравнивание чем то, которое указано в директиве SEGMENT. Например: DATA SEGMENT PARA ALIGN 32 ; ошибка: PARA означает только 16 ALIGN 3 ; ошибка: не является степенью двойки

Segment attributes illegally redefined

(Недопустимое переопределение атрибутов сегмента) Директивой SEGMENT повторно открывается уже определенный ра- нее сегмент, при этом указываются новые значения для атрибутов этого сегмента. Например: DATA SEGMENT BYTE PUBLIC DATA ENDS DATA SEGMENT PARA ; ошибка: ранее было указано ; выравнивание на байт DATA ENDS При повторном открытии сегмента атрибуты либо должны иметь те же самые значения, либо вообще быть опущены. Если при повтор- ном открытии сегмента атрибуты не указаны, то используются атри- буты из предыдущего определения.

Segment name is superfluous

(Имя сегмента игнорируется) Это предупреждающее сообщение выдается в тех случаях, когда в директиве .CODE указано имя сегмента, а в текущей модели памяти не допускается использовать более одного сегмента.

String too long

(Слишком длинная строка) Указанная в кавычках строка имеет длину, превышающую макси- мально допустимую - 255 символов.

Symbol already defined:__

(Имя идентификатора уже определено) Указанное имя идентификатора уже было ранее объявлено с тем же самым типом. Например: BB DB 1,2,3 BB DB ? ; ошибка: BB уже определено

Symbol already different kind

(Имя идентификатора уже объявлено с другим типом) Указанное идентификатора имя было ранее объявлено с другим типом, например: BB DB 1,2,3 BB DW ? ; ошибка: BB уже объявлено с типом BYTE

Symbol has no width or mask

(Имя идентификатора не может быть использовано в операциях WIDTH и MASK) Операнд операции WIDTH или MASK не является именем записи или именем поля записи. Например: B DB 0 mov ax,MASK B ; В не является полем записи

Symbol is not a segment or already part of a group

(Имя идентификатора не является именем сегмента либо уже оп- ределено в группе) Либо имя идентификатора уже определено в группе, либо не яв- ляется именем сегмента. Например: DATA SEGMENT DATA ENDS DGROUP GROUP DATA DGROUP2 GROUP DATA ; ошибка: DATA уже определено в DGROUP

Text macro expansion exceeds maximum line length

(Расширение текстовой макрокоманды превышает максимально до- пустимую длину) Это сообщение об ошибке выдается, когда расширение текстовой макрокоманды превышает максимально допустимую длину.

Too few operands to instruction

(В команде не хватает операндов) В команде должно быть указано большее число операндов. Нап- ример: ADD ax ; отсутствует второй операнд

Too many errors or warnings

(Слишком много ошибок или предупреждений) Сообщения об ошибках больше выдаваться не будут. Максималь- ное число сообщений об ошибках, которое выдается Турбо Ассембле- ром, равно 100. Это максимально допустимое число ошибок превыше- но. Ассемблирование программы тем не менее будет продолжено, однако далее будут печататься только предупреждающие сообщения.

Too many initial values

(Слишком много начальных значений) При инициализации структуры или объединения указано слишком много значений. Например: XYZ STRUC A1 DB ? A2 DB ? XYZ ENDS ANXYZ XYZ <1,2,3> ; ошибка: в XYZ определены ; только два поля При инициализации полей структур и объединений допускается указывать меньше значений, чем число полей, но нельзя указывать больше значений.

Too many register multipliers in expression

(В выражении содержится слишком много множителей для регист- ров) Для процессора 80386 допускается коэффициент индексных опе- рандов. Однако коэффициент можно указывать не более, чем у одного регистра. Например: mov EAX,[2*EBX+4*EDX] ; слишком много ; коэффициентов

Too many registers in expression

(В выражении указано слишком много регистров) В выражении указано более одного индексного и одного базис- ного регистра. Например: mov ax,[BP+SI+DI] ; нельзя одновременно указывать SI и DI

Too many USES registers

(Слишком много регистров в директиве USES) В директиве USES для текущей процедуры указано более 8 ре- гистров.

Trailling null value assumed

(Предполагается конечное пустое значение) Директива определения данных (DB, DW и т.д.) оканчивается запятой. TASM интерпретирует ее как пустое значение. Например: db 'привет',13,10 ; то же, что и db'привет',13,10?

Undefined symbol

(Идентификатор не определен) Оператор содержит идентификатор, который не был ранее опре- делен в исходном файле.

Unexpected end of file (no END directive)

(Неожиданный конец файла (нет директивы END)) В исходном файле отсутствует директива END. Директива END обязательно должна быть указана в конце исходного файла.

Unknown character

(Неизвестный символ) Текущая строка исходной программы содержит символ, который не принадлежит набору символов, допустимых для построения симво- лических имен и выражений в Турбо Ассемблере. Например: add ax,!1 ; ошибка: восклицательный знак - ; недопустимый символ

Unmatched ENDP:_

(Непарная директива ENDP:_) В директиве ENDP указано имя, не совпадающее с именем проце- дуры, которую закрывает данная директива. Например: ABC PROC XYZ ENDP ; ошибка: вместо XYZ должно быть указано ABC

Unmatched ENDS:_

(Непарная директива ENDS:_) В директиве ENDS указано имя, не совпадающее с именем сег- мента, который закрывает данная директива, либо не совпадающее с именем структуры или объединения, оканчивающегося этой директи- вой. Например: ABC STRUC XYZ ENDP ; ошибка: вместо XYZ должно быть указано ABC DATA SEGMENT CODE ENDS ; ошибка: вместо CODE должно быть указано DATA

User-generated error

(Ошибка, сгенерированная пользователем) Ошибка выдана в результате выполнения одной из директив ге- нерирования ошибки. Например: .ERR ; попадание в это место является ошибкой USES has no effect without language (USES игнорируется без спецификации языка) Это предупреждающее сообщение выдается, если оператор USES используется без предварительной спецификации языка.

Value out of range

(Значение константы превышает допустимое значение) Константа представляет собой, вообще говоря, число правиль- ного формата. Однако ее значение превышает допустимую в данном конкретном случае величину. Например: DB 400

Сообщения о фатальных ошибках -----------------------------------------------------------------

При возникновении фатальных ошибок Турбо Ассемблер выдает соответствующее сообщение и ассемблирование пользовательского файла немедленно прекращается, независимо от того чем была вызва- на эта ошибка. В этом разделе приводится перечень возможных сооб- щений о фатальных ошибках.

Bad switch

(Неверный параметр-переключатель командной строки) В командной строке указан неверный параметр. См. Главу 2, где дается подробное описание параметров командной строки.

Can't find @file __

(Не найден файл подсказок __) В командной строке указано имя несуществующего файла подска- зок. Следует проверить, указано ли полное имя файла. В Турбо Ас- семблере отсутствует умолчание для расширения имени файла подска- зок. Вероятной причиной данного сообщения может быть отсутствие места на диске при записи на этот диск файла, содержащего перек- рестные ссылки.

Сan't locate file __

(Не обнаружен файл __) В директиве INCLUDE указано имя несуществующего файла. О ди- рективе INCLUDE см. Главу 10 настоящего руководства, где описан алгоритм поиска Турбо Ассемблером включаемых файлов. Если выдано это сообщение, проверьте, правильно ли указано в имени файла имя дисковода и маршрут доступа.

Error writing to listing file

(Ошибка при записи в файл листинга) Возможно при записи файла листинга на диск было исчерпано место на этом диске.

Error writing to object file

(Ошибка при записи в объектный файл) Возможно при записи объектного файла на диск было исчерпано место на этом диске.

File not found

(Не найден файл) В командной строке указано имя несуществующего исходного файла. Проверьте, правильно ли указано имя файла, включены ли имя диска и маршрут доступа, если файл находится в каталоге, отличном от текущего.

File was changed or deleted while assembly in progress

(Файл был изменен или уничтожен в процессе ассемблирования) Какая-либо другая программа, например, резидентная активизи- руемая утилита, уничтожила открытый Турбо Ассемблером файл. В Турбо Ассемблере не допускается повторное открытие файла, который был ранее успешно открыт.

Insufficient memory to process command line

(Не хватает памяти для обработки командной строки) Командная строка занимает более 64К, либо для ее обработки не хватает имеющейся памяти. Следует упростить командную строку либо запустить Турбо Ассемблер при наличии большего объема памя- ти.

Internal error

(Внутренняя ошибка) Это сообщение не должно выдаваться при нормальной работе Турбо Ассемблера. Сделайте копию файлов, вызвавших появление этой ошибки, и сообщите в отдел технического обслуживания фирмы Borland.

Invalid command line

(Недопустимая командная строка) Неверен формат командной строки, с помощью которой запуска- ется Турбо Ассемблер. Например, в команде: NASM, MYFILE не указан исходный файл, который должен ассемблироваться. См. Главу 2, где дается подробное описание командной строки.

Invalid number after _

(Недопустимый номер после _) Верно указан идентификатор параметра, однако неверно специ- фицирован числовой параметр после нее. См. Главу 2, где описаны параметры командной строки.

Out of hash space

(Не хватает памяти под хеш-таблицы) Каждому имени идентификатора, определяемому в пользователь- ской программе, соответствует один элемент хеш-таблицы. Эта таб- лица рассчитана на 16384 определяемых пользователем имен иденти- фикаторов при условии запуска Турбо Ассемблера с достаточным объ- емом свободной памяти. Если в программе пользователя определено большее количество имен идентификаторов, то нужно указать пара- метр командной строки /КН, для того чтобы обеспечить в хеш-табли- це нужное число элементов для описания этого количества символи- ческих имен.

Out of memory

(Не хватает памяти) Не хватает свободной памяти для ассемблирования пользова- тельского файла. Попробуйте использовать TASMX. Если в оперативной памяти имеются какие-либо резидентные в памяти программы, то следует убрать их и повторить ассемблирова- ние файла. Возможно, что потребуется перезагрузить систему, для того чтобы полностью освободить память. Другой путь состоит в том, чтобы разбить исходный файл на два или более, или переписать части исходного файла таким обра- зом, чтобы его ассемблирование требовало меньше памяти. Для этого в программе следует укоротить имена идентификаторов, уменьшить число комментариев в макрокомандах, уменьшить число ссылок впе- ред.

Out of string space

(Не хватает памяти под строки) Не хватает оперативной памяти для хранения строк: имен иден- тификаторов, имен файлов, информации для разрешения опережающих ссылок, текстов макрокоманд. Допускается максимум 512К памяти, а ваш модуль превысил этот объем. Попробуйте использовать TASMX.

Too many errors found

(Обнаружено слишком много ошибок) Ассемблирование пользовательского файла прекращено, посколь- ку в этом файле содержится слишком много ошибок. Возможно, что на самом деле ошибок не так уж и много, однако они таковы, что вызы- вают эффект "снежного кома". Примером такой ошибки может быть не- верное определение имени идентификатора, которое используется во многих строках программы. На самом деле сделана лишь одна ошибка (неверно определено имя идентификатора), однако сообщение об ошибке будет выдано в каждой строке, где появляется это имя. Турбо Ассемблер прекращает ассемблирование файла, когда об- щее число ошибок и предупреждающих сообщений достигает 100.

Unexpected end of file (no END directive)

(Неожиданный конец файла (отсутствует директива END)) В конце исходного файла отсутствует директива END. Каждый исходный файл обязательно должен заканчиваться директивой END.
                       Назад | Содержание | Вперед


Обратная связь
Информация для авторов

Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum

Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее…

Like this post? Please share to your friends:
  • Error printing from word
  • Error opening word document
  • Error numbers in excel
  • Error microsoft office interop excel
  • Error in loading dll in excel vba