Скачиваний:
4
Добавлен:
01.04.2014
Размер:
54.27 Кб
Скачать

Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники»

Кафедра программного обеспечения информационных технологий

Контрольная работа № 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