кр1ч2
.doc
Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники»
Кафедра программного обеспечения информационных технологий
Контрольная работа № 1
(вариант 1)
по дисциплине
Конструирование программ и языки программирования
Часть 2
Минск 2009
Цель работы
Целью работы является изучение использования подпрограмм и способов передачи параметров.
Задание 1. Выполнить вызовы процедуры, которая выводит тексты, символы или числа в соответствии с вариантом. Параметры передаются через регистр. Процедура одна, вызовов несколько.
Задание 2. Повторить задание 1 с передачей параметров через память.
Задание 3. Повторить задание 1 с передачей параметров через стек.
Варианты индивидуальных заданий
№/№ вар. |
Вывести |
Кол. вызовов |
Тип процедуры |
Кол. параметров |
Передача параметров через |
1.1 |
символы |
5 |
ближняя |
1 |
регистр |
1.2 |
числа |
1 |
дальняя |
2 |
память |
1.3 |
строки |
1 |
ближняя |
3 |
стек |
Решение на языке Ассемблер
data segment
mess1 db 10,13,'Символы: $'
mess2 db 10,13,'Числа: $'
chisl db ?
nomF db ?
str1 db 10,13,'Сторка 1$'
str2 db 10,13,'Строка 2$'
str3 db 10,13,'Строка 3$'
data ends
stk segment
db 256 dup (?)
stk ends
code1 segment "code"
assume cs:code1,ds:data,ss:stk
;-----------------------------------------------------------
show_chr proc near ;Процедура вывода символов (ближняя)
mov ah,02h ;02 функция вывода символа
int 21h
retn ;Возврат управления вызвавшей программе
show_chr endp
;-----------------------------------------------------------
;-----------------------------------------------------------
show_str proc near ;Процедура вывода строк (ближняя)
mov bp,sp ;Используем bp для косвенной адресации
mov dx,[bp+2] ;Вывод строки 1
mov ah,09h
int 21h
mov dx,[bp+4] ;Вывод строки 2
mov ah,09h
int 21h
mov dx,[bp+6] ;Вывод строки 3
mov ah,09h
int 21h
retn 6 ;Возврат управления вызвавшей программе,
;переданные параметры удаляются
show_str endp
;-----------------------------------------------------------
Begin:
mov ax,data
mov ds,ax
;-----------------------------------------------------------
;Вывод символов
;Сообщение о выводе символов
mov dx,offset mess1
mov ah,09h
int 21h
mov cx,5 ;Задаем количество вызовов процедуры
mov dl, 041h ;Передача параметров через регистр, в dl код символ 'А'
Chr_loop:
call show_chr ;Вызов ближней процедуры
inc dx ;Изменяем выводимый символ на следующий
loop Chr_loop
;------------------------------------------------------------
;------------------------------------------------------------
;Вывод чисел
;Сообщение о выводе чисел
mov dx,offset mess2
mov ah,09h
int 21h
;Передача параметров через память
mov chisl,05h ;первый параметр процедуры - выводимое число
mov nomF,02h ;второй параметр - номер функции прерывания
call far ptr show_int ;Вызов дальней процедуры
;-------------------------------------------------------------
;-------------------------------------------------------------
;Вывод строк
push offset str3 ;Занесение в стек смещения строки 3
push offset str2 ;Занесение в стек смещения строки 2
push offset str1 ;Занесение в стек смещения строки 1
call show_str ;Вызов ближней процедуры
;-------------------------------------------------------------
mov ax,4c00h ;стандартный выход
int 21h
code1 ends
;Второй сегмент кода расположен в памяти за первым
code2 segment "code"
assume cs:code2
show_int proc far ;Процедура вывода чисел (дальняя)
mov dl,chisl
add dx,30h
mov ah,nomF ;02 функция вывода символа
int 21h
retf ;Возврат управления вызвавшей программе
show_int endp
code2 ends
end Begin