
лабораторная работа / лабораторные работы по ASSAMBLER / лаб №2 вар 13
.doc
Цель работы: ознакомление со способами определения данных и изучение механизма передачи упарвления в программе (циклы и переходы) для операций сравнения.
ЗАДАНИЕ ДЛЯ ЛАБОРАТОРНОЙ РАБОТЫ
-
Определить массив в области данных
-
Составить алгоритм прграммы, выполняющей действия с элементами массива согласно № варианта (см. табл.).
-
Написать программу на языке ассемблер, реализующей данный алгоритм.
-
Отладить и выполнить программу.
№ Варианта соответствует № по списку.
№ Варианта |
Задание |
Интервал |
Кол-во элементов |
13
|
Наити сумму отрицательных элементов массива, попавших в заданный интервал |
(-13;0)
|
10
|
Turbo Assembler Version 3.1 25/03/04 14:35:53 Page 1
liliya.asm
1 0000 lab segment para 'code'
2 assume cs:lab; ds:lab; ss:lab
3 org 100h
4 0100 EB 0B 90 ad:jmp asd
5 0103 EC F4 F5 F6 F8 FB FE+ titl db -20,-12,-11,-10,-8,-5,-2,-1,5,6
6 FF 05 06
7 010D asd proc
8 010D B9 000A mov cx,10
9 0110 BA 0000 mov dx,0
10 0113 BB 0103r lea bx,titl
11 0116 8A 07 m1:mov al,[bx]
12 0118 3C F3 cmp al,-13
13 011A 7F 03 jg m2
14 011C EB 0A 90 jmp m4
15 011F 3C 00 m2:cmp al,0
16 0121 7C 03 jl m3
17 0123 EB 03 90 jmp m4
18 0126 02 D0 m3:add dl,al
19 0128 43 m4:inc bx
20 0129 E2 EB loop m1
21 012B C3 ret
22 012C asd endp
23 012C lab ends
24 end ad
Turbo Assembler Version 3.1 25/03/04 14:35:53 Page 2
Symbol Table
Symbol Name Type Value
??DATE Text "25/03/04"
??FILENAME Text "liliya "
??TIME Text "14:35:53"
??VERSION Number 030A
@CPU Text 0101H
@CURSEG Text LAB
@FILENAME Text LILIYA
@WORDSIZE Text 2
AD Near LAB:0100
ASD Near LAB:010D
M1 Near LAB:0116
M2 Near LAB:011F
M3 Near LAB:0126
M4 Near LAB:0128
TITL Byte LAB:0103
Groups & Segments Bit Size Align Combine Class
LAB 16 012C Para none CODE
Отладим программу:
Вполняемая команда |
Значения регистров |
Значения флагов |
mov cx,000A |
ip 010D |
|
mov dx,0000 |
cx 000A ip 0110 |
|
mov bx,0103 |
ip 0113 |
|
mov al,[bx] |
bx 0103 ip 0116 |
|
cmp al ,F3 |
ax 00EC ip 0118 |
|
jg 011F |
ip 011A |
с=1 s=1 p=1 |
cmp ax,0128 |
ip011C |
|
jl 0125 |
ip 0120 |
с=0 p=0 |
jmp 0127 |
|
|
add dx,ax |
ip 0125 |
|
inc bx |
dx F4EC ip 0127 |
|
loop 0116 |
bx 0104 ip 0129 |
s=0 p=0 |
ret |
ax 0006 bx 010D cx 0000 dx 00CF ip 012B |
с=0 |
Вывод: мы ознакомились со способами определения данных и изучили механизм передачи упарвления в программе (циклы и переходы) для операций сравнения. Результат, полученный вычислениями на языке Ассемблера, совпадает с результатами, вычисленными вручную.