Министерство образования Российской Федерации
Новосибирский государственный технический университет
Факультет автоматики и вычислительной техники
Кафедра вычислительной техники
«Ассемблирование и отладка готовых программ, изучение системы команд и способов адресации операндов»
По дисциплине: «Программирование»
Группа:
АМ-316
Выполнили:
Баринов А.Е.
Жданов Д.С.
Проверил:
Афанасьев В.А.
Новосибирск
2005г.
Работа над синтаксическими ошибками при ассемблировании программы.
21 Start mov ax,@data ;Установка в ds адреса сегмента данных
**Error** hello.ASM(13) Illegal instruction
Недопустимая команда (опущено двоеточие после имени метки)
22 mow ds,ax ; Установка в ds адреса сегмента данных
**Error** hello.ASM(14) Illegal instruction
Недопустимая команда (искажение имени команды или директивы)
23 0005 BA 0000 mov dx,OFFSET Prompt ;Сообщение-запрос
**Error** hello.ASM(15) Undefined symbol: PROMPT
Идентификатор не определен (неправильная запись пользовательского идентификатора)
30 0018 BA 0000 IsAfternoon: mov dx,OFFSET GoodAfternoon ;Указание на "Здравствуйте"
**Error** hello.ASM(24) Undefined symbol: GOODAFTERNOON
Идентификатор не определён (GOODAFTERNOON не был ранее определён)
Offset DB 5
10 AE E0
*Warning* hello.ASM(8) Reserved word used as symbol: OFFSET
Использование имени служебного идентификатора OFFSET в качестве пользовательского
20 0049 00 Example DB 257
**Error** hello.ASM(12) Value out of range
Значение константы Example превышает допустимое значение
21 0049 0D 18 0D ?? Poly DB 13,24,13,
*Warning* hello.ASM(13) Missing operand - trailing ? assumed
Ошибка синтаксиса (запятая в конце списка)
4 MODEL
**Error** hello.ASM(5) Invalid model type
5 STACK 256
**Error** hello.ASM(6) Model must be specified first
Недопустимая модель памяти (отсутствует указание имени модели)
42 0026 A0 0000r mov al,[ExCode ;Возврат кода ошибки
**Error** hello.ASM(34) Need right square bracket
Отсутствует правая квадратная скобка
43 0026 A1 0001r mov al,[ExCodeX];Возврат кода ошибки
**Error** hello.ASM(35) Operand types do not match
43 0026 A1 0001r mov aх,[ExCode];Возврат кода ошибки
**Error** hello.ASM(35) Operand types do not match
Не совпадают типы операндов (ExCodeХ – тип DW, ExCode – тип DB)
47 0029 C7 07 0001 mov [bx],1
*Warning* hello.ASM(39) Argument needs type override
Требуется явно указать тип операнда (тип ячейки памяти)
48 0029 89 1F mov [bx],[bx+2] ;память-память НЕЛЬЗЯ!!!
**Error** hello.ASM(40) Illegal memory reference
*Warning* hello.ASM(40) Argument needs type override
Недопустимая ссылка на память (недопустимая пересылка из памяти в память)
Warning: Использование для пересылки одного и того же регистра bx
49 0029 01 add [cx+2],ax ;СХ нельзя использовать в косвенной адресации
**Error** hello.ASM(41) Illegal indexing mode
Недопустимый режим индексации (СХ нельзя использовать в косвенной адресации)
Отсутствие END
**Fatal** hello.ASM(45) Unexpected end of file encountered
Неожиданный конец файла (отсутствует директива END)
Диаграмма расположения сегментов в заданных для исследования программах( mov.asm, logikal.asm)
Mov.map
Start Stop Length Name Class
00000H 00058H 00059H _TEXT CODE
00060H 0006CH 0000DH _DATA DATA
00070H 0016FH 00100H STACK STACK
Program entry point at 0000:0000
Рис. 1.1. Диаграмма расположения сегментов программы mov.exe в памяти
Logikal.map
Start Stop Length Name Class
00000H 00046H 00047H _TEXT CODE
00050H 00054H 00005H _DATA DATA
00060H 0015FH 00100H STACK STACK
Program entry point at 0000:0000
Рис. 1.2. Диаграмма расположения сегментов программы logikal.exe в памяти
Анализ машинных кодов ассемблерных команд с указанием используемых видов адресации.
Mov.exe
mov ax, [bx+2] ;[15] – базовая адресация
mov r,r/m ->1000|101w md reg r/m dispL dispH
w=1, т.к. формат регистра AX равен слову
md=01, r/m=111 определяется из таблицы 1.2 по адресному выражению BX+D8
reg=000, определяется из таблицы 1.2 из поля, соответствующего регистру AX
1000|1011 0100|0111 02h 00h
8B 47 02 00
Полученный код совпадает с машинным кодом соответствующей команды из окна CPU TurboDebugger для рассматриваемого файла.
mov [word bx+2], 24 ;[16] –базовая со смещением адресации
mov r/m,d ->1100|011w md 000 r/m dispL dispH dataL dataH
w=1, т.к. спецификатором word формат данных определен словом
md=01, r/m=111 определяется из таблицы 1.2 по адресному выражению BX+D8, т.к. отсутствует поле reg определяющее назначение второго операнда;
1100|0111 0100|0111 02h 00h 18h 00h
C7 47 02 00 18 00
Полученный код совпадает с машинным кодом соответствующей команды из окна CPU TurboDebugger для рассматриваемого файла.
mov al, [si+b_x] ;[18] – индексная адресация
mov r,r/m ->1000|101w md reg r/m dispL dispH
w=0, т.к. формат регистра AL равен байту
md=10, r/m=100 определяется из таблицы 1.2 по адресному выражению SI+D16;
reg=000, определяется из таблицы 1.2 из поля, соответствующего регистру AL
1000|1010 1000|0100 00h 00h
8A 84 00 00
Полученный код совпадает с машинным кодом соответствующей команды из окна CPU TurboDebugger для рассматриваемого файла.
Logikal.exe
oper DB 0AAh
rcl [oper],1; [oper]=55,cf=1 [12] – косвенная адресация
rcl r/m,1->1101|000w md 010 r/m dispL dispH
w=0, т.к. oper имеет тип byte
md=00, r/m=110, т.к. в команде используется косвенная адресация
1101|0000 0001|0110 00h 04h
D0 16 00 04
Полученный код совпадает с машинным кодом соответствующей команды из окна CPU TurboDebugger для рассматриваемого файла.
sar al,1;al=07,cf=0 [15] – прямая адресация
sar r/m,1 ->1101|000w md 111 r/m dispL dispH
w=0, т.к. формат регистра AL равен байту
md=11, r/m=000, т.к. в команде используется прямая адресация
1101|0000 1111|1000
D0 F8
Полученный код совпадает с машинным кодом соответствующей команды из окна CPU TurboDebugger для рассматриваемого файла.
sal al,1; *2 [21] – прямая адресация
sal r/m,1 ->1101|000w md 100 r/m dispL dispH
w=0, т.к. формат регистра AL равен байту
md=11, r/m=000, т.к. в команде используется прямая адресация
1101|0000 1110|0000
D0 E0
Полученный код совпадает с машинным кодом соответствующей команды из окна CPU TurboDebugger для рассматриваемого файла.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.