Ассемблирование и отладка готовых программ. Изучение системы команд и способов адресации операндов. Вариант 5

Страницы работы

Содержание работы

Министерство образования Российской Федерации

Новосибирский государственный технический университет

Факультет автоматики и вычислительной техники

Кафедра вычислительной техники


Отчет

К лабораторной работе №1

«Ассемблирование и отладка готовых программ, изучение системы команд и способов адресации операндов»

По дисциплине: «Программирование»

Группа:

АМ-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 для рассматриваемого файла.

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
61 Kb
Скачали:
0