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

Текст задания

Необходимо выполнить умножение сразу четырех чисел с использованием мультимедийных регистров, а также FPU. С помощью программы – отладчика Debug проследить процесс умножения чисел. 
Варианты различаются каким именно способом будет заполнен массив (каким видом формулы).

Код программы

OPTION DOTNAME

option casemap:none

include temphls.inc

include win64.inc

OPTION PROLOGUE:rbpFramePrologue

OPTION EPILOGUE:rbpFrameEpilogue

extrn ExitProcess : proc

.data

res dd 7

mas db 16 dup(?)

.code

rand proc ; процедура рандома

push rdx ; сохраняем регистры

push rbx

xor rdx,rdx

mov rax, r11

mov rbx, 25173

mul rbx

mov rbx, 13849

add rax, rbx

mov rbx, 65536

div rbx

mov rax, rdx

mov rbx, 100 ; делаем рандом от 1 до 99

xor rdx,rdx

div rbx

mov rax, rdx

pop rbx

pop rdx ;восстанавливаем регистры

ret

rand endp

Start proc

LOCAL msg:MSG

PINSRD xmm1, ebx, 0 ;заносим в 128битный регистр 4 значения

v ebx = res - 4

PINSRD xmm1, ebx, 1

v ebx = res + 3

PINSRD xmm1, ebx, 2

v ebx = res - 2

PINSRD xmm1, ebx, 3

v r10 = 10

v rdx = 0

mov r11,5

.while TRUE

.if rdx == 16 ; заполняем массив 16-ю значениями

.goto Next

.endif

invoke rand

mov r11, rax

v mas[rdx] = ax

v rdx = rdx + 1

.endw

Next:

v rdx = 1

.while TRUE

v eax = mas[rdx] ; заносим первые четыре значения из массива в 128 регистр xmm2

PINSRD xmm2, eax, 0

v rdx = rdx + 1

v eax = mas[rdx]

PINSRD xmm2, eax, 1

v rdx = rdx + 1

v eax = mas[rdx]

PINSRD xmm2, eax, 2

v rdx = rdx + 1

v eax = mas[rdx]

PINSRD xmm2, eax, 3

PMADDWD xmm2,xmm1 ;перемножаем регистры

PEXTRd EAX,XMM2,0 ;записываем результат обратно в массив

v rdx = rdx - 3

mov mas1[rdx],ax

v rdx = rdx + 1

PEXTRd EAX,XMM2,1

mov mas[rdx],ax

v rdx = rdx + 1

PEXTRd EAX,XMM2,2

mov mas[rdx],ax

v rdx = rdx + 1

PEXTRd EAX,XMM2,3

mov mas[rdx],ax

.if rdx == 16

.goto Ex1

.endif

.endw

Ex1:

v rdx = 1

.while TRUE

v r11 = mas[rdx]

v rdx = rdx + 1

.if rdx == 16

.goto Ex

.endif

.endw

Ex:

invoke ExitProcess,0

Start endp

End

Рисунок 7. Блок-схема.

Рисунок 8. Результат выполнения программы.

Задание № 5 Текст задания

Создать шаблон консольного приложения, который показывает логику работы данных приложений. Приложение должно уметь распознавать аргументы (аргумент может иметь всего один символ; аргументы придумать самостоятельно в соответствии с вариантом структур) и пояснять пользователю, что аргумент прочитан корректно.

Вариант 13

информация о цветке

Код программы

OPTION DOTNAME

option casemap:none

include temphls.inc

include win64.inc

OPTION PROLOGUE:rbpFramePrologue

OPTION EPILOGUE:rbpFrameEpilogue

extrn WriteConsoleA : PROC

extrn AllocConsole : PROC

extrn GetStdHandle : PROC

extrn ReadConsoleA : PROC

extrn ExitProcess : proc

.data

Flowers struct

flowername db 15 dup(?)

color db 15 dup (?)

territory db 15 dup (?)

Flowers ends

Petunia1 Flowers <'Petunia'>

Petunia2 Flowers <'different'>

Petunia3 Flowers <'garden'>

Rose1 Flowers <'Rose'>

Rose2 Flowers <'different'>

Rose3 Flowers <'garden'>

Kalanchoe1 Flowers <'Kalanchoe'>

Kalanchoe2 Flowers <'different'>

Kalanchoe3 Flowers <'home'>

MoneyTree1 Flowers <'MoneyTree'>

MoneyTree2 Flowers <'green'>

MoneyTree3 Flowers <'home'>

Chamomile1 Flowers <'Chamomile'>

Chamomile2 Flowers <'white'>

Chamomile3 Flowers <'garden'>

h DWORD ?

h1 DWORD ?

read byte 20 dup(?)

NumberOfCharsRead DWORD ?

NumberOfCharsWritten DWORD ?

view byte "Flower view:", 0

col byte "Color:", 0

terr byte "Territory:", 0

error byte "ERROR!", 0

newstr byte 10

description byte "*** Press to view information about the flower: ***", 10, 10, "Chamomile - type 'C'", 10, "Rose - type 'R'", 10, "Kalanchoe - type 'K'", 10, , "MoneyTree - type 'M'", 10, "Petunia - type 'P'", 10, "EXIT - type 'E'", 10, 0

.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 WriteConsoleA,h1,ADDR description,SIZEOF description,ADDR NumberOfCharsWritten,0

Read:

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke ReadConsoleA, h, ADDR read,sizeof read, ADDR NumberOfCharsRead, 0

cmp read, 'E'

je Exit

cmp read, 'P'

je Petunia

cmp read, 'R'

je Rose

cmp read, 'K'

je Kalanchoe

cmp read, 'M'

je MoneyTree

cmp read, 'C'

je Chamomile

Error:

invoke WriteConsoleA, h1, ADDR error,sizeof error, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

.goto Read

Petunia:

invoke WriteConsoleA, h1, ADDR view,sizeof view, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Petunia1,sizeof Petunia1, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR col,sizeof col, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Petunia2,sizeof Petunia2, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR terr,sizeof terr, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Petunia3,sizeof Petunia3, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

.goto Read

Rose:

invoke WriteConsoleA, h1, ADDR view,sizeof view, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Rose1,sizeof Rose1, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR col,sizeof col, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Rose2,sizeof Rose2, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR terr,sizeof terr, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Rose3,sizeof Rose3, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

.goto Read

Kalanchoe:

invoke WriteConsoleA, h1, ADDR view,sizeof view, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Kalanchoe1,sizeof Kalanchoe1, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR col,sizeof col, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Kalanchoe2,sizeof Kalanchoe2, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR terr,sizeof terr, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Kalanchoe3,sizeof Kalanchoe3, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

.goto Read

MoneyTree:

invoke WriteConsoleA, h1, ADDR view,sizeof view, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR MoneyTree1,sizeof MoneyTree1, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR col,sizeof col, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR MoneyTree2,sizeof MoneyTree2, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR terr,sizeof terr, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR MoneyTree3,sizeof MoneyTree3, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

.goto Read

Chamomile:

invoke WriteConsoleA, h1, ADDR view,sizeof view, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Chamomile1,sizeof Chamomile1, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR col,sizeof col, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Chamomile2,sizeof Chamomile2, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR terr,sizeof terr, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

invoke WriteConsoleA, h1, ADDR Chamomile3,sizeof Chamomile3, ADDR NumberOfCharsWritten, 0

invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0

.goto Read

Exit:

invoke ExitProcess,0

Start endp

end

Рисунок 9. Блок-схема.

Рисунок 10. Результат выполнения программы.

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