ЛАБОРАТОРНА РОБОТА №2
Тема: “робота з рядками мовою асемблеру”
Мета: Закріплення практичних навичок складання і налагодження програм, що включають команди обробки рядків мовою "Асемблер".
Індивідуальне завдання: Визначити максимальний з елементів масивів А и В, для яких виконується умова (Аі=Ві).
Розробка алгоритму рішення задачі
Вибір змінних
Таблиця 1.
Змінні програми
Ім’я змінной |
Призначення змінних |
A |
Початок масиву A |
B |
Початок масиву B |
N |
Кількість елементі масиву |
max |
Змінна, у яку заноситься результат |
s1, s2, s3, s4, s5, s6 |
Строки повідомлення для користувачав |
Схема алгоритму рішення задачі
Текст програми:
; Определить максимальный из элементов массивов А и В, для
;которых выполняется условие (Аi=Вi).
data segment
A dw 25h, 46h, 50h, 20h, 90h, 50h, 50h, 23h, 36h, 60h
dw 32h, 69h, 28h, 31h, 43h, 47h, 75h, 40h, 38h, 56h
db 10, 13, '$'
B dw 42h, 46h, 36h, 47h, 50h, 50h, 95h, 25h, 36h, 34h
dw 32h, 19h, 46h, 21h, 88h, 30h, 75h, 70h, 25h, 56h
db 10, 13, '$'
N dw 20
max dw ?
s1 db 'Начало программы.',10,13,'$'
s2 db 'А это усё ;-) ',10,13,'$'
s3 db 'Исходноя строка 1: ','$'
s4 db 'Исходноя строка 2: ','$'
s5 db 'Символ, удовлетворяющий условию работы: ','$'
s6 db 10,13,'$'
data ends
code segment
assume cs:code,ds:data
m0: mov ax,data ; адрес сегмента - в регистр DS
mov ds,ax
;
mov ax, 1000h ; установка палитры
mov bx, 0207h ; палитра для текста
int 10h ; Сервис видео
mov ah,9h ; Вывод
mov dx,offset s1 ; трассирующего сообщения
int 21h ; о запуске программы
; Вывод строки 1
mov dx,offset s3
int 21h
mov dx,offset A
int 21h
mov dx,offset s6
int 21h
; Вывод строки 1
mov dx,offset s4
int 21h
mov dx,offset B
int 21h
mov dx,offset s6
int 21h
; Поиск требуемого числа
; Подготовка к циклу
mov cx, N ; количество элементов массива
mov bp, 0000h ; в аккамулятор исходное значение
mov si, offset A
mov di, offset B
M1:mov bx, [si]
mov ax, [di]
add si, 2
add di, 2
test ax, 8000h
jnz M2
cmp ax, bx
jne M2
cmp ax, bp
jle M2
mov bp, ax
M2:loop M1
mov max, bp
mov ah,9h ; Вывод
mov dx,offset s5 ; результата работы программы
int 21h
mov ah, 02h
mov dx, max
int 21h
mov ah,9h
mov dx,offset s6
int 21h
mov ah,9h ; Вывод
mov dx,offset s2 ; трассирующего сообщения
int 21h ; о завершении программы
mov ah,4ch ; Выход
int 21h ; в DOS
code ends
end m0
Результати виконання програми:
Стан області даних до виконання програми:
-d ds:0 d2
171B:0000 25 00 46 00 50 00 20 00-90 00 50 00 50 00 23 00 %.F.P. ...P.P.#.
171B:0010 36 00 60 00 32 00 69 00-28 00 31 00 43 00 47 00 6.`.2.i.(.1.C.G.
171B:0020 75 00 40 00 38 00 56 00-0A 0D 24 42 00 46 00 36 u.@.8.V...$B.F.6
171B:0030 00 47 00 50 00 50 00 95-00 25 00 36 00 34 00 32 .G.P.P...%.6.4.2
171B:0040 00 19 00 46 00 21 00 88-00 30 00 75 00 70 00 25 ...F.!...0.u.p.%
171B:0050 00 56 00 0A 0D 24 14 00-00 00 8D A0 E7 A0 AB AE .V...$..........
171B:0060 20 AF E0 AE A3 E0 A0 AC-AC EB 2E 0A 0D 24 80 20 ............$.
171B:0070 ED E2 AE 20 E3 E1 F1 20-3B 2D 29 20 0A 0D 24 88 ... ... ;-) ..$.
171B:0080 E1 E5 AE A4 AD AE EF 20-E1 E2 E0 AE AA A0 20 31 ....... ...... 1
171B:0090 3A 20 24 88 E1 E5 AE A4-AD AE EF 20 E1 E2 E0 AE : $........ ....
171B:00A0 AA A0 20 32 3A 20 24 91-A8 AC A2 AE AB 2C 20 E3 .. 2: $......, .
171B:00B0 A4 AE A2 AB A5 E2 A2 AE-E0 EF EE E9 A8 A9 20 E3 .............. .
171B:00C0 E1 AB AE A2 A8 EE 20 E0-A0 A1 AE E2 EB 3A 20 24 ...... ......: $
171B:00D0 0A 0D 24 ..$
Контроль процесу виконання програми з використанням отладчика і застосуванням трасуючих повідомлень:
-g
Начало программы.
Исходноя строка 1: % F P Р P P # 6 ` 2 i ( 1 C G u @ 8 V
Исходноя строка 2: B F 6 G P P Х % 6 4 2 F ! И 0 u p % V
Символ, удовлетворяющий условию работы: u
А это усё ;-)
Нормальное завершение работы программы
Стан області даних після виконання програми:
-d ds:0 d2
171B:0000 25 00 46 00 50 00 20 00-90 00 50 00 50 00 23 00 %.F.P. ...P.P.#.
171B:0010 36 00 60 00 32 00 69 00-28 00 31 00 43 00 47 00 6.`.2.i.(.1.C.G.
171B:0020 75 00 40 00 38 00 56 00-0A 0D 24 42 00 46 00 36 u.@.8.V...$B.F.6
171B:0030 00 47 00 50 00 50 00 95-00 25 00 36 00 34 00 32 .G.P.P...%.6.4.2
171B:0040 00 19 00 46 00 21 00 88-00 30 00 75 00 70 00 25 ...F.!...0.u.p.%
171B:0050 00 56 00 0A 0D 24 14 00-75 00 8D A0 E7 A0 AB AE .V...$..u.......
171B:0060 20 AF E0 AE A3 E0 A0 AC-AC EB 2E 0A 0D 24 80 20 ............$.
171B:0070 ED E2 AE 20 E3 E1 F1 20-3B 2D 29 20 0A 0D 24 88 ... ... ;-) ..$.
171B:0080 E1 E5 AE A4 AD AE EF 20-E1 E2 E0 AE AA A0 20 31 ....... ...... 1
171B:0090 3A 20 24 88 E1 E5 AE A4-AD AE EF 20 E1 E2 E0 AE : $........ ....
171B:00A0 AA A0 20 32 3A 20 24 91-A8 AC A2 AE AB 2C 20 E3 .. 2: $......, .
171B:00B0 A4 AE A2 AB A5 E2 A2 AE-E0 EF EE E9 A8 A9 20 E3 .............. .
171B:00C0 E1 AB AE A2 A8 EE 20 E0-A0 A1 AE E2 EB 3A 20 24 ...... ......: $
171B:00D0 0A 0D 24 ..$
Висновки:
У роботі ознайомився:
- c псевдооператорами визначення даних, рядків і сегментів;
- с командами умовних переходів і керування циклами;
- зі структурою головної програми;
- с виводом рядків на екран за допомогою 9 -ой функції 21H переривання.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.