Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2otchyot.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
443.61 Кб
Скачать

Министерство образования и науки Российской Федерации

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИМЕНИ Н.Г.ЧЕРНЫШЕВСКОГО»

ЛАБОРАТОРНАЯ РАБОТА №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

  1. 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]