Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебн пособ по арх и прогр МП.doc
Скачиваний:
66
Добавлен:
10.12.2013
Размер:
1.59 Mб
Скачать

Приложение 2 Практическая работа на пк

Здесь рассматривается практическая работа на ПК начиная с создания программы и заканчивая её отладкой в Turbo Debugger.

Например, пусть задание выглядит следующим образом: Написать программу, сравнивающую элементы двух массивов, каждый из 6 элементов. Если соответствующие элементы массивов равны, то вместо них в третий массив записать 0, если не равны, то поменять их местами.

В соответствии с заданием в любом текстовом редакторе, например, в Блокноте, создаём текст программы.

; Program Example, file_name prog1.asm

das segment

mas1 db 7,?,7 dup(?),'$'

mas2 db 7,?,7 dup(?),'$'

string db 10,13,'$'

string1 db 'Input 6 member of mas1',10,13,'$'

string2 db 'Input 6 member of mas2',10,13,'$'

das ends

sta segment stack

db 20 dup(?)

sta ends

cod segment

assume cs:cod,ds:das,ss:sta

my proc

;инициализация регистра ds

push ds

mov ax,0

push ax

mov ax,das

mov ds,ax

;ввод строки чисел

lea dx,string1

mov ah,09h

int 21h

lea dx,mas1

mov ah,0ah

int 21h

lea dx,string

mov ah,09h

int 21h

lea dx,string2

mov ah,09h

int 21h

lea dx,mas2

mov ah,0ah

int 21h

lea dx,string

mov ah,09h

int 21h

;ввод строк закончен

mov cx,6

m1: mov bx,cx

mov al,mas1[bx+1]

cmp al,mas2[bx+1]

jz m2

xchg mas2[bx+1],al

mov mas1[bx+1],al

jmp m3

m2: mov mas1[bx+1],'0'

mov mas2[bx+1],'0'

m3: loop m1

lea dx,mas1[2]

mov ah,09h

int 21h

lea dx,string

mov ah,09h

int 21h

mov dx,0

lea dx,mas2[2]

mov ah,09h

int 21h

mov ax,4c00h ;завершение работы программы

int 21h

my endp

cod ends

end my

Текст программы может содержать, если необходимо, пояснения, написанные в соответствии с правилами языка ASSEMBLER, т.е. пояснению предшествует символ ";". Далее написанную программу необходимо откомпилировать, что и делаем с помощью программы Tasm. Формат вызова следующий:

Tasm.exe prog1.asm

Если всё сделано верно и программа не содержит ошибок, то после окончания работы программы tasm получим объектный файл prog1.obj . Если текст программы содержал ошибки, то после завершения работы программы они будут указаны в окне с указанием строк, содержащих ошибки. После устранения ошибок действия по получению объектного файла Prog1.obj необходимо повторить. Далее для получения исполняемого файла Prog1.exe необходимо воспользоваться программой Link.exe, преобразующей нашу программу в двоичные коды, понятные микропроцессору. Формат вызова следующий:

Link.exe prog1.obj

После окончания работы программы Link получим исполняемый файл prog1.exe. Для отладки нашей программы запустим её в Turbo Debugger. Для этого в командной строке набираем:

Td.exe prog1.exe

В результате получаем на экране следующее изображение:

Ё File Edit View Run Breakpoints Data Options Window Help READY

+-[_]-CPU 80486-----------------------------------ss:0054 = 00--------1-[][]-+

¦ cs:0100804B5402 or byte ptr [bp+di+54],02 ‑ ax 0000 ¦c=0¦

¦ cs:0104 5A pop dx _ bx 0000 ¦z=0¦

¦ cs:0105 A012D5 mov al,[D512] _ cx 0000 ¦s=0¦

¦ cs:0108 0096A804 add [bp+04A8],dl _ dx 0000 ¦o=0¦

¦ cs:010C B540 mov ch,40 _ si 0000 ¦p=0¦

¦ cs:010E 25AA01 and ax,01AA _ di 0000 ¦a=0¦

¦ cs:0111 2D5009 sub ax,0950 _ bp 0000 ¦i=1¦

¦ cs:0114 6A80 push FF80 _ sp 0080 ¦d=0¦

¦ cs:0116 4B dec bx _ ds 5FD3 ¦ ¦

¦ cs:0117 54 push sp _ es 5FD3 ¦ ¦

¦ cs:0118 025AA0 add bl,[bp+si-60] _ ss 5FD3 ¦ ¦

¦ cs:011B 12D5 adc dl,ch _ cs 5FD3 ¦ ¦

¦ cs:011D 0096A804 add [bp+04A8],dl _ ip 0100 ¦ ¦

¦ cs:0121 B540 mov ch,40 _ ¦ ¦

¦ cs:0123 25AA01 and ax,01AA ­ ¦ ¦

¦___________________________________________________________+----------------¦

¦ ds:0000 CD 20 00 A0 00 9A F0 FE - а ЪЁ_ ¦ ss:0082 0000 ¦

¦ ds:0008 1D F0 72 1E C7 FD CC 0A Ёr‑¦¤¦ ¦ ss:00800D00 ¦

¦ ds:0010 A2 18 80 02 24 27 92 18 вА$'Т ¦ ss:007E 0000 ¦

¦ ds:0018 01 01 01 00 02 07 08 FF _¦ ss:007C 0000 ¦

¦ ds:0020 FF FF FF FF FF FF FF FF ________ ¦ ss:007A 0000 ¦

+------------------------------------------------------------------------------+

F1-Help F2-Bkpt F3-Mod F4-Here F5-Zoom F6-Next F7-Trace F8-Step F9-Run F10-Menu

По мере исполнения программы по шагам (клавиша F7), содержимое верхнего окна, содержащего коды нашей программы, будет изменяться. После приглашения программы ввести элементы массивов, следует ввести эти элементы в таком порядке:

Input 6 member of mas1

123456 ; и нажать клавишу <Enter>

Input 6 member of mas2

123356; и нажать клавишу <Enter>

После ввода каждого элемента массива содержимое DS:0000 будет изменяться. Для просмотра этих изменений достаточно нажать комбинацию клавиш CTRL+G, и в появившемся окне указать в GOTO необходимый адрес: DS:0000.

Выполняя программу далее по шагам, можно пронаблюдать изменение флагов, содержимого регистров и т.д. В конце выполнения программы на экране получим результат:

000300

000400

Выход из программы td осуществляется комбинацией клавиш Alt+X.