написанные программы / asm lab # 2 / Отчет_asm_2
.doc
Лабораторная Работа №2
“Основы программирования на языке Ассемблер”
Выполнил: студент группы 2100 Митрофанов А.С.
Март 2009 года
1 Цель работы
Продолжить ознакомление с синтаксисом языка assembler. Получить навыки работы с одномерными массивами и научиться выводить сообщения на экран.
2 Блок-схема алгоритма
3 Текст программы с комментариями
; lab2.doc
.model small
.stack 256
.data
mes_el db 0ah,0dh,'element with index=$'
mes_eq db " is equal to 0$",0ah,0dh
mes_neq db " is not equal to 0$",0ah,0dh
mes_val db ' and value=$'
mas dw 5,7,0,3,0,1,4,0
.code
.486
main:
mov ax,@data
mov ds,ax; связка ds с сегментом данных
xor ax,ax; обнуление ax
prepare:
mov cx,8; счетчик цокла
mov esi,0; индекс начального элемента массива
compare:
mov dx,mas[esi*2]
cmp dx,0; сравнение текущего элемента с 0
je equal; переход если =0
not_equal:
mov ah,09h; вывод mes_el
lea dx,mes_el
int 21h
mov ah,02h; вывод номера элемента
mov dx,si
add dl,30h
int 21h
mov ah,09h; вывод mes_val
lea dx,mes_val
int 21h
mov ah,02h; вывод значения элемента
mov dx,mas[esi*2]
add dl,30h
int 21h
mov ah,09h; вывод mes_neq
lea dx,mes_neq
int 21h
inc esi; следущий элемент
dec cx
jcxz exit; если cx=0 то выходим
jmp compare
equal:
mov ah,09h; вывод mes_el
lea dx,mes_el
int 21h
mov ah,02h; вывод номера элемента
mov dx,si
add dl,30h
int 21h
mov ah,09h; вывод mes_val
lea dx,mes_val
int 21h
mov ah,02h; вывод значения элемента
mov dx,mas[esi*2]
add dl, 30h
int 21h
mov ah,09h; вывод mes_eq
lea dx,mes_eq
int 21h
inc esi; следущий элемент
dec cx
jcxz exit; если cx=0 то выходим
jmp compare
exit:
mov ah,0h; выход только по esc
int 16h
cmp ah,1
jne exit
mov ax,4c00h
int 21h
end main
4 Результаты работы программы
element with index=0 and value=5 is not equal to 0
element with index=1 and value=7 is not equal to 0
element with index=2 and value=0 is equal to 0
element with index=3 and value=3 is not equal to 0
element with index=4 and value=0 is equal to 0
element with index=5 and value=1 is not equal to 0
element with index=6 and value=4 is not equal to 0
element with index=7 and value=0 is equal to 0
5 Описание основных команд, использованных в программе
CMP (compare) – сравнение двух операндов. Команда реализуется как вычитание операнда-источника из операнда-приемника, но результат не сохраняется в приемнике, а лишь оказывает влияние на арифметические флаги.
MOV (move) – пересылка данных. Команда передает значение операнда-источника в операнд-приемник.
JMP (jump) – команда передает управление другой команде по заданному адресу перехода.
JE/JNE - передает управление другой команде по заданному адресу в зависимости от состояния бита ZF в регистре флагов.
6 Выводы по работе программы
На основе результата работы программы, можно сделать вывод, что она работает правильно.