Лабораторная работа № 3.

Организация подпрограмм на языке Ассемблера.

Цель работы: Изучение модульного программирования на языке

ассемблера.

Задание на лабораторную работу: Вариант №6.

code segment

assume cs: code, ds:data

BARD proc near – название п/п

PUSH BP - поместить в стек содержимое BP

MOV BP, SP - скопировали SP в BP

MOV SI,[BP+4] - скопировали в SI данные с адреса BP+4

MOV AX,[SI] - скопировали данные по адресу DS:SI в AX

CMP AX,0 - сравнили содержимое AX с 0

ja met3 - если AX>0, то переходим на метку №3

jmp met4 – переход на метку №4

met3: - метка №3

MOV ah,9 - поместили в AH число 910

MOV DX, offset MSG_Y - скопировали в DX адрес переменной MSG_Y

int 21h - вызов 21 прерывания

RET - выход из п/п

met4: - метка №4

MOV ah,9 - поместили в AH число 910

MOV DX, offset MSG_N - скопировали в DX адрес переменной MSG_N

int 21h - вызов 21 прерывания

RET - выход из п/п

BARD endp - конец п/п

INPUTNUMB PROC near – заголовок п/п

mov AH,0Ah - скопировали в AH число 1016

mov DX, offset buf - скопировали в DX адрес переменной buf

INT 21h - вызов 21 прерывания

MOV DI, DX – скопировали DX в DI

INC DI – увеличили DI на 1

MOV CL, [DI] – получили в CL байт с адреса DS:DI

xor CH, CH - обнулили CH

xor AX, AX – обнулили AX (для накопления числа)

CMP CX,0 - сравнили содержимое CX с 0

je met1 – если CX = 0, то переход на метку met1

xor BX, BX – обнулили BX

MOV BP,10 – записали в BP константу 10

met2: - метка №2

MUL BP – умножили AX на 10 (BP)

INC DI – увеличили DI на 1

MOV BL, [DI] – прочитали байт с адреса DS:DI в BL

SUB BL,30h – вычли 3016 из BL

ADD AX, BX – вычислили AX

met1: - метка №1

LOOP met2 - переход на метку №2

RET - выход из п/п

INPUTNUMB endp - конец п/п

start:

MOV AX, data

MOV DS, AX - скопировали AX в DS

CALL INPUTNUMB - вызов п/п INPUTNUMB

MOV X, AX - скопировали AX в X

MOV SI, offset X - скопировали в SI адрес переменной X

PUSH SI - поместили в стек содержимое SI

CALL BARD - вызов п/п BARD

MOV AX,4c00h

INT 21h - вызов 21 прерывания

data segment - начало сегмента описания переменных

buf db 7,8 dup (?)

x dw (?)

MSG_Y db 'YES!!!$'

MSG_N db 'NO!!!!$'

dates ends

end Start

Вывод: В ходе данной лабораторной работы были изучены принципы модульного программирования на языке ассемблера.