
- •«Пермский национальный исследовательский политехнический университет»
- •Цель работы:
- •Исходное задание.
- •Расчетно-графическая часть:
- •3.1. Алгоритм работы программы:
- •3.2. Листинг программы:
- •3.3. Ответы на вопросы:
- •3.4. Ответы на контрольные вопросы:
- •Выводы по работе:
- •Список используемой литературы:
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Пермский национальный исследовательский политехнический университет»
Кафедра Автоматизации технологических процессов и производств
Отчет по лабораторной работе № 1 |
Знакомство с языком ассемблера |
(название лабораторной работы)
|
|
Выполнил |
||
студент гр. |
АТП-12 |
|
|
Щипачев И.Д. |
|
(подпись) |
(Ф.И.О.) |
|
|
||
Проверил Преподаватель |
||
|
Сташков С.И. |
|
(подпись) |
(Ф.И.О.) |
Пермь 2013
Цель работы:
Научиться анализировать ход выполнения программы на языке Ассемблера при помощи отладчика TurboDebugger.
Исходное задание.
Даны две 4-х-байтовые таблицы SOURSE и DEST. SOURSE – исходная таблица, DEST - конечная. Программа копирует каждый байт из таблицы SOURSE в таблицу DEST по следующему правилу:
- если байт <0F, то к этому байту добавляется 0F и результат пересылается в DEST;
- если байт =0F, то он пересылается в DEST без изменений;
- если байт >0F, то из него вычитается 0F и результат пересылается в DEST.
Таблица SOURSE содержит следующие элементы: 01, АF, 0F, 08.
Расчетно-графическая часть:
3.1. Алгоритм работы программы:
Даны две 4-х-байтовые таблицы SOURSE и DEST. SOURSE – исходная таблица, DEST - конечная. Программа копирует каждый байт из таблицы SOURSE в таблицу DEST по следующему правилу:
- если байт <0F, то к этому байту добавляется 0F и результат пересылается в DEST;
- если байт =0F, то он пересылается в DEST без изменений;
- если байт >0F, то из него вычитается 0F и результат пересылается в DEST.
3.2. Листинг программы:
Turbo Assembler Version 3.2 11/17/13 18:55:27 Page 1
LAB1.ASM
lab1
1 ; ========================
2 0000 my_stack segment stack 'stack'
3 0000 40*(73 74 61 63 6B + db 64 dup('stack ')
4 20 20 20)
5 0200 my_stack ends
6 ; ========================
7 0000 dseg segment
8 0000 01 AF 0F 08 source db 01h,0afh,0fh,08h
9 0004 04*(??) dest db 4 dup(?)
10 0008 dseg ends
11 ; ========================
12 0000 cseg segment
13 assume cs:cseg,ds:dseg,ss:my_stack
14 0000 entry proc far
15 0000 1E push ds
16 0001 33 C0 xor ax,ax
17 0003 50 push ax
18 0004 B8 0000s mov ax,dseg
19 0007 8E D8 mov ds,ax
20 0009 B9 0004 mov cx,4
21 000C BB 0000r mov bx,offset source ; or LEA bx,source
22 000F BF 0004r mov di, offset dest ; or LEA di,dest
23 0012 again:
24 0012 8A 07 mov al,[bx]
25 0014 3C 0F cmp al,0fh
26 0016 74 09 je e
27 0018 72 05 jb a
28 001A 2C 0F sub al,0fh
29 001C EB 03 90 jmp e
30 001F 04 0F a: add al,0fh
31 0021 88 05 e: mov [di],al
32 0023 43 inc bx
33 0024 47 inc di
34 0025 E2 EB loop again
35 0027 CB ret
36 0028 entry endp
37 0028 cseg ends
38 end entry
Turbo Assembler Version 3.2 11/17/13 18:55:27 Page 2
Symbol Table
lab1
Symbol Name Type Value
??DATE Text "11/17/13"
??FILENAME Text "LAB1 "
??TIME Text "18:55:27"
??VERSION Number 0314
@CPU Text 0101H
@CURSEG Text CSEG
@FILENAME Text LAB1
@WORDSIZE Text 2
A Near CSEG:001F
AGAIN Near CSEG:0012
DEST Byte DSEG:0004
E Near CSEG:0021
ENTRY Far CSEG:0000
SOURCE Byte DSEG:0000
Groups & Segments Bit Size Align Combine Class
CSEG 16 0028 Para none
DSEG 16 0008 Para none
MY_STACK 16 0200 Para Stack STACK