Министерство образования и науки Российской Федерации
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИМЕНИ Н.Г.ЧЕРНЫШЕВСКОГО»
ЛАБОРАТОРНАЯ РАБОТА №2
ПО ДИСЦИПЛИНЕ
«Системное программное обеспечение»
студентки 4 курса 421 группы направления 09.03.01 — Информатика и вычислительная техника
факультета КНиИТ
Горшковой Екатерины Алексеевны
Научный руководитель ________________ Н.Е.Тимофеева
Саратов 2016
Задание №1
Текст задания
Необходимо вывести на экран строки с использованием функции MessageBoxA, ExitProcess.
Вариант 9
The leaves are falling
One by one.
Summer’s over
School’s begun;
Код программы
extrn MessageBoxA: PROC
extrn ExitProcess: PROC ; объявление процедур
.DATA
s1 db "6.1", 0
s2 db "The leaves are falling", 10
s3 db "One by one", 10
s4 db "Summer's over", 10
s5 db "School's begun;", 0
.CODE
Start PROC
SUB rsp, 28h
MOV RCX, 0
LEA RDX, s2 ; заносим переменные в регистры для дальнейшего вызова процедуры
LEA R8, s1
MOV R9, 0
CALL MessageBoxA ;выводим сообщение
CALL ExitProcess ;процедура завершения программы
START ENDP
END
Рисунок 1. Блок-схема.
Рисунок 2. Результат выполнения программы.
Задание № 2 Текст задания
Подсчет формулы, вывод сообщения и результата формулы с помощью функции MessageBoxA.
Вариант 13
Z / Q + A;
Код программы
extrn MessageBoxA: PROC
extrn ExitProcess: PROC
.DATA
error db "ERROR!", 0
s1 db "Задание 2.",0
s2 Db "Z/Q+A = ",0
s3 Db 0
.CODE
Start PROC
sub rsp, 28h ; выделяем память в стеке под функции
mov RAX, 20
mov RBX, 5
mov RCX, 3
cmp RBX, 0
je zero
xor RDX, RDX
div RBX
add RAX, RCX
mov R8, RAX
call CHANGE
mov RCX, 0
lea RDX, s2
lea R8, s1
mov R9, 0
call MessageBoxA
call ExitProcess
zero:
mov RCX, 0
lea RDX, error
lea R8, s1
mov R9, 0
call MessageBoxA
call ExitProcess
Start ENDP
CHANGE PROC
mov RCX, 0
mov RDX, 0
mov RBX, 10H
cycle1:
mov RAX, R8
DIV RBX
add RDX, 30H
mov R8, RAX
PUSH RDX
INC RCX
CMP R8, 0
JNE cycle1
lea RDI, s2
add RDI, 8
cycle2:
POP RDX
mov RAX, RDX
STOSB
XOR RDX, RDX ;заносим параметры для вывода через функцию
DEC RCX
CMP RCX, 0
JNE cycle2
RET
CHANGE endp
END
Рисунок 3. Блок-схема.
Рисунок 4. Результат выполнения программы.
Задание № 3 Текст задания
Необходимо произвести подсчет формулы и вывести в Console результат с использованием функции ReadConsoleA, WriteConsoleA, GetstdHandle, ExitProcess. Для вызова функции например, ReadConsoleA, необходимо написать команду call и название функции.
Вариант 13
a / 32 + b * f – 43 * a;
Код программы
OPTION DOTNAME
option casemap:none
include win64.inc
include temphls.inc
extrn WriteConsoleA : PROC
extrn AllocConsole : PROC
extrn GetStdHandle : PROC
extrn ReadConsoleA : PROC
extrn ExitProcess : PROC
.data
BUFSIZE equ 20
h DWORD ?
h1 DWORD ?
buf BYTE BUFSIZE dup(?)
NumberOfCharsWritten DWORD ?
STR1 byte "Enter any key.",0
ERR byte "ERROR!",0
minus dq "-", 0
cWritten DWORD ?
cRead DWORD ?
.code
Start proc
LOCAL msg:MSG
invoke AllocConsole
invoke GetStdHandle, STD_INPUT_HANDLE
mov h, EAX
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov h1, EAX
invoke ReadConsoleA, h, ADDR buf, BUFSIZE, ADDR cRead, 0
v r14 = buf
invoke ReadConsoleA, h, ADDR buf, BUFSIZE, ADDR cRead, 0
v r13 = buf
invoke ReadConsoleA, h, ADDR buf, BUFSIZE, ADDR cRead, 0
v r12 = buf
.if r14 { '0' || r14 } '9' || r13 { '0' || r13 } '9' || r12 { '0' || r12 } '9'
.goto error
.endif
SUB R14, 30H
SUB R13, 30H
SUB R12, 30H
MOV RAX, R14
MOV RBX, R13
MOV RCX, R12
call MATCH
invoke WriteConsoleA, h1, ADDR minus, SIZEOF minus, ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR STR1, SIZEOF STR1, ADDR cWritten, 0
invoke ReadConsoleA, h, ADDR buf,BUFSIZE, ADDR cRead, 0
invoke ExitProcess,0
error:
invoke WriteConsoleA, h1, ADDR ERR, SIZEOF ERR, ADDR cWritten, 0
invoke ReadConsoleA, h, ADDR buf,BUFSIZE, ADDR cRead, 0
invoke ExitProcess,0
Start endp
MATCH PROC
;a/32 = x
MOV RAX, R14
XOR RDX, RDX
MOV RBX, 32
DIV RBX
MOV R15, RAX
;b*f = y
MOV RAX, R13
MOV RBX, R12
MUL RBX
;y-x
MOV RBX, R15
SUB RAX, RBX
MOV R11, RAX
;43*a = z
MOV RAX, R14
MOV RCX, 43
MUL RCX
;z-(y-x)
SUB RAX, R11
MOV R10, RAX
call CHANGE
RET
MATCH ENDP
CHANGE PROC
MOV RCX, 0
MOV RDX, 0
MOV RBX, 10
cycle1:
MOV RAX, R10
CWD ;AX-> DX:AX
XOR RDX, RDX
DIV RBX
ADD RDX, 30H
MOV R10, RAX
PUSH RDX
INC RCX
CMP R10, 0
JNE cycle1
LEA RDI, minus
ADD RDI, 1
cycle2:
POP RDX
MOV RAX, RDX
STOSB
XOR RDX, RDX
DEC RCX
CMP RCX, 0
JNE cycle2
RET
CHANGE endp
end
Рисунок 5. Блок-схема.
Рисунок 6. Результат работы программы.
Задание 4
