Лабораторная работа № 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
Вывод: В ходе данной лабораторной работы были изучены принципы модульного программирования на языке ассемблера.


