Ввести двумерный массив размером 6х4. Найти максимальный элемент двумерного массива. Перенести строку, содержащую этот элемент, в конец.

.686; Директива определения типа микропроцессора

. Model flat, stdcall; задачи линейной модели памяти
; И соглашения ОС Windows
option casemap: none; отличие малых и больших букв

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\fpu.inc
include \masm32\include\user32.inc
include \masm32\include\msvcrt.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\fpu.lib

. Data; директива определения данных
_c dd 24
sum dd 0
max dd 0; запись в 32-разрядную ячейку памяти с именем op1
temp dd 7
frmt db «% d», 0
buf db 50 dup (?)
stdout DWORD?
stdin DWORD?
cRead dd?
mas1 dd 32 dup (0)
nomer dd 0
st1 db «Vvesty masiv:
st2 db «Вывод результата перемещения», 0
st3 db 10 dup (0)
ifmt db «Максимальный элемент =% d. Строка% d перенена в конец массива», 0

. Code; директива начала кода
_start:
lea esi, mas1; загрузки адреса начала массива
mov ecx, _c
m1:
mov ebx, ecx
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov stdin, eax
invoke WriteConsoleA, stdout, ADDR st1, 14, NULL, NULL; VIVOD ST1
invoke ReadConsole, stdin, ADDR buf, 20, ADDR cRead, NULL; чтение числа как символ
invoke crt_atoi, ADDR buf;превратить символ в число
mov [esi], eax
add esi, 4
mov ecx, ebx
loop m1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

mov ecx, _c
lea esi, mas1;загрузка адреса начала массива
mov eax, [esi]; загрузки числа
m3:
. IF (eax> max); условие
mov max, eax
add esi, 4; расчет адреса нового числа
mov eax, [esi] loop m3

. ELSE; иначе
add esi, 4;расчет адреса нового числа
mov eax,[esi] loop m3; перейти,если ecx и 0

. ENDIF; окончания директивы высокого уровня

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

mov ecx, _c
lea esi, mas1; загрузки адреса начала массива
mov eax, [esi]; загрузки числа
m4:

. IF (eax == max); условие
inc nomer; находим в каком месте находится максимальный элемент
add esi, 4;расчет адреса нового числа
mov eax, [esi] jmp m5
loop m4

. ELSE; иначе
inc nomer
add esi, 4; расчет адреса нового числа
mov eax, [esi] loop m4; перейти, если ecx и 0

. ENDIF; окончания директивы высокого уровня

m5:
mov eax,nomer
mov edx,0
div temp; в регистре eax находится число строки — 1
mov edx,0

. IF (eax == 0); условие
mov ebx,24
. ELSEIF (eax == 1); условие
mov ebx,18
. ELSEIF (eax == 2); условие
mov ebx,12
. ELSEIF (eax == 3); условие
mov ebx,6
. ENDIF
mov ecx,6
mov edx,ax
shl edx,2
add ebx,edx
x1: lea esi,mas1; загрузки адреса начала массива
mov edx,[Esi + eax * 4]; загрузки числа
mov [esi + ebx],edx
mov edx,0
mov [esi],edx
add esi,4
loop x1
jmp end_prog
end_prog:

mov ebx,max
inc eax

invoke wsprintf,\
ADDR st3,\
ADDR ifmt,\
ebx,ax
invoke MessageBox, \
NULL, \
addr st3, \
addr st2, \
MB_OK
invoke ExitProcess, 0
ret
end _start; окончания программы

Реклама

Ввести двумерный массив А (N, N). Составить алгоритм и программу подсчета среднего арифметического значений двумерного массива. Найти отклонения от среднего в элементов первой строки.

.686; Директива определения типа микропроцессора

. Model flat, stdcall; задачи линейной модели памяти
; И соглашения ОС Windows
option casemap: none; отличие малых и больших букв

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\fpu.inc
include \masm32\include\user32.inc
include \masm32\include\msvcrt.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\fpu.lib

. Data; директива определения данных
buf db 30 dup (?)
stdout DWORD?
stdin DWORD?
cRead dd?
temp dd?
st1 db «Vvesty masiv:
st2 db «Вывод результата отклонения от среднего арифметического», 0
st3 db 10 dup (0)
sum dd 0
sum1 dd 0
mas1 dd 1,2,3,4,5,6,7,8,9
const1 dd 100
_c dd 9
_cc dd 3
. Code; директива начала кода
_start:
lea esi, mas1; загрузки адреса начала массива
mov ecx, _c
m1:
mov ebx, ecx
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov stdin, eax
invoke WriteConsoleA, stdout, ADDR st1, 14, NULL, NULL; VIVOD ST1
invoke ReadConsole, stdin, ADDR buf, 20, ADDR cRead, NULL; чтения числа как символ
invoke crt_atoi, ADDR buf;преобразовать символ в число
mov [esi],eax
add esi,4
mov ecx,ebx
loop m1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

lea esi,mas1; загрузки адреса начала массива
mov ecx,_c
finit
fld sum
m2:
fild dword ptr [esi] faddp st (1),st

add esi,
loop m2
fild _c
fdiv
lea esi, mas1
mov ecx, _cc
fld sum1

m3: fild dword ptr [esi] faddp st (1), st

add esi, 4
loop m3
fild _cc
fdiv
fdiv

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
invoke FpuFLtoA, 0, 10, ADDR st3, SRC1_FPU or SRC2_DIMM
invoke MessageBox, NULL, addr st3, addr st2, MB_OK
invoke ExitProcess, NULL;возврат управления Windows
; И освобождения ресурсов

end _start; директива окончания программы с именем start

Ввести 2 дробных числа и сложить их и вывести на консоль и в MessageBox.

.686; Директива определения типа микропроцессора

. Model flat, stdcall; задачи линейной модели памяти
; И соглашения ОС Windows
option casemap: none; отличие малых и больших букв

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\fpu.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\fpu.lib

ExitProcess proto: DWORD

. Data; директива определения данных
st1 db «Вывод суммы массива! А», 0
st2 db 10 dup (?), 0
ifmt db «Сумма =% d», 0
masivA db 75,31,88,32
sum dw 0
iden db 0
work1 db 0
work2 db 0
prom dd 0

. Code; директива начала кода
_start:
mov eax, 0
mov ebx, 0
mov ecx, 3
mov edx, 0
lea esi, masivA

M1:
mov prom, ebx
mov al, byte ptr [esi + ebx]; пересылки значения массива в младший регистр al
inc ebx
mov bl, byte ptr [esi + ebx]; пересылки значения массива в младший регистр bl
mov work1, al
mov work2, bl
and eax, 21h
and ebx, 21h
sub eax, ebx проверка сходимости битов
jz M3
mov iden, 0;идентификатор. Он необходим для суммы.

M2:
mov ebx, prom
inc ebx
loop M1
jmp M4

M3:
mov al, work1
dec iden
jz Q1; если идентификатов = 0, тогда перейти на метку Q1
mov iden, 1
mov bl, work2
Q1: add sum, ax; подсчета суммы
add sum, bx; подсчета суммы
jmp M2

M4:
mov ebx, 0
mov bx, sum; пересылка значение суммы в регистр
invoke wsprintf, \
ADDR st2, \
ADDR ifmt, \
ebx
invoke MessageBox, \; функция вывода значения
NULL, \
addr st2, \
addr st1 \
MB_OK
invoke ExitProcess, 0
end _start; окончания программы