- •«Київський національний університет технологій та дизайну»
- •Система X Window….………………..…….………………………3
- •Робочі столи користувача …………….……….……………….....5 Загальні відомості про робочі столи користувача в
- •Операційна система Linux (Ubuntu ). Системне програмування в shell – інтерпритаторі.
- •Система X Window
- •Менеджери вікон
- •Робочі столи користувача
- •Завдання 1.
- •Команда порівняння
- •Завдання 2.
- •Завдання 3.
- •Використана література
Завдання 3.
1. В MASM32 написать программу решения задачи.
2. Ввод-вывод реализовать с использованием функций API.
Построить вектор D, каждый элемент которого равен произведению элементов столбцов матрицы X(m,k), деленному на максимальный элемент этого же столбца.
Алгоритм вирішення завдання:
Вводимо розмірність матриці
вводимо елементи матриці
Дивимося на знак кожного елемента матриці, і якщо він від’ємний, то заносимо елемент у вектор
виводимо отриманий вектор
.386
.model flat, stdcall
option casemap:none ;делаем метки чувствительными к регистру
include \masm32\include\windows.inc
include \masm32\include\fpu.inc
include \masm32\include\msvcrt.inc
include \masm32\macros\macros.asm ;подключаем в программу необходимые файлы
uselib comctl32,user32,kernel32,msvcrt ; подключаем необходмые библиотеки
.data ;сегмент данных
hWin dd ? ;неинициализировання переменная размером 4 байта
mas dd 64 dup(0)
num dd ?
vect dd 128 dup(0) ; переменная размером 4 байта, заполняется 128
нулями
st1 db "Елемент вектора Y[%u]=%d", 0 ; текстовая строка размером 1 байт, в конце 0
st2 db 20 dup (0)
st3 db "Виведення вектора поелементно",0
st4 db "Vvedit kilkist radkiv masuvy: ",0
st5 db "Vvedit kilkist stovpciv masuvy: ",0
st6 db "Vvedit element masuvy: ",0
vnum dd 0
four db 4
stdout DWORD ?
stdin DWORD ?
cRead dd ?
m dd ?
n dd ?
buf db 30 dup(?)
.code ;сегмент кода
start:
invoke GetStdHandle, STD_OUTPUT_HANDLE ; вызов функции GetStdHandle макросом invoke
mov stdout, eax ; копирование в переменную stdout значения регистра eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov stdin, eax
invoke WriteConsoleA, stdout, ADDR st4, 30, NULL, NULL ; вывод ST1 в консоль
invoke ReadConsole,stdin,ADDR buf,5,ADDR cRead,NULL ; чтения числа как символ
invoke crt_atoi,ADDR buf ; преобразовать символ в число
mov m,eax ; копировать в переменную m содержимое регистра eax
invoke WriteConsoleA, stdout, ADDR st5, 32, NULL, NULL ; вывод ST1 в консоль
invoke ReadConsole, stdin, ADDR buf, 5, ADDR cRead, NULL ; чтения числа как символ
invoke crt_atoi,ADDR buf ; преобразовать символ в число
mov n,eax ; копировать в переменную n содержимое регистра eax
mul m ; умножения регистра ЕАХ на переменную m и помещение результата в
;EDX:EAX
mov num, eax ;копировать в переменную num содержимое регистра eax
lea edi, mas ;Вычисляет эффективный адрес переменной mas и помещает его в
;регистр edi
mov ecx, num ;копировать переменную num в содержимое регистра ecx
m1:
mov ebx,ecx ;копировать содержимое регистра ecx в содержимое регистра ebx
invoke WriteConsoleA, stdout, ADDR st6, 23, NULL, NULL ; вывод ST1 в консоль
invoke ReadConsole, stdin, ADDR buf, 5, ADDR cRead, NULL ; чтения числа как символ
invoke crt_atoi, ADDR buf ; преобразовать символ в число
stosd ;Копирует регистр ЕАХ в память по адресу ES:EDI
mov ecx, ebx ;копировать содержимое регистра ecx в содержимое регистра ebx
loop m1 ;Уменьшает регистр ЕСХ на 1 и выполняет переход типа short на метку если
;ЕСХ не равен нулю
mov ecx,num ;копировать в переменную num содержимое регистра ecx
mov esi,offset mas ;в регистр esi смещение переменной mas
mov edi,offset vect ;копировать в регистр edi смещение переменной vect
loop1:
lodsd ;копирует двойное слово из памяти по адресу DS:ESI в регистр ЕАХ
test eax, eax ;устанавливает флаги SF, ZF и PF в соответствии с полученным результатом
jns lbl ; если нет знака, то переход на lbl
stosd ;Копирует регистр ЕАХ в память по адресу ES:EDI
inc vnum ; увеличивает значение vnum на 1
lbl:
loop loop1
mov esi,0 ; поместить в регистр значение 0
mov ecx,vnum
loop2:
push ecx
push esi
mov eax,esi
shr eax,2
invoke wsprintf, addr st2, addr st1, eax, vect[esi]
invoke MessageBox,NULL,addr st2,chr$("Виведення вектора Y поелементно"),0
pop esi ;поместить содержимое регистра esi в стек
pop ecx ; выгрузить содержимое стека в регистр ecx
add esi,4 ; прибавить к значению в 4 esi
loop loop2
invoke ExitProcess,0 ; возвращение управления ОС Windows
end start