Задано матрицу 3 х 6. Определить элементы кратные 3 в каждой строке и поместить на их место элемент, номер которого совпадает с номером строки. Результат выполнения программы вывести в окно консоли.

.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

DATE1 STRUCT; тип данных СТРУКТУРА с именем DATE1
elem1 db? ; Имя первого поля структуры
elem2 db? ; Имя второго поля структуры
elem3 db? ; Имя третьего поля структуры
elem4 db? ; Имя четвертого поля структуры
elem5 db? ; Имя четвертого поля структуры
elem6 db? ; Имя четвертого поля структуры

DATE1 ENDS
. Data; директива определения данных
iden db 0
temp_ecx dd 0
max db 0
nomer db 1
const1 dw 3
stemp db 3 dup (0), 0
stroka db 0
stdout DWORD?
stdin DWORD?
str1 DATE1 <20,9,2,15,10,3>; структура с именем str1
str2 DATE1 <6,31,1,3,6,11>; структура с именем str2
str3 DATE1 <4,6,155,2,54,66>;структура с именем str2
text db «Format massiva zakoncheno», 0
st1 db «Вывод измененного массива чисел», 0
st2 db 180 dup (?), 0

ifmt db «% d», 0
. Code; директива начала сегмента-данных
start:; метка начала программы с именем start
xor edx, edx;заполнения нулями
mov ebx, 3; загрузки количества строк
lea esi, str1; загрузки адреса первой строки структуры
m1: mov ecx, 6; количество элементов в строке
mov max, 0
inc stroka
m2: mov al, [esi];загрузка элемента из строки структуры
mov edx, 0
idiv const1
. IF (edx == 0)
mov ebx, 7
sub ebx, ecx; определения элемента массива кратном 3
mov [esi], bl; запись номера места в этот элемент
. ENDIF

jmp m4; безусловный переход, если наоборот

m4: inc esi;подготовка адреса нового элемента
mov eax, 0
loop m2; есх: = ecx — 1 и переход на m2, если не ноль

lea esi, str2
. IF (stroka == 1)
jmp m1
. ENDIF
lea esi, str3
. IF (stroka == 2)
jmp m1
. ENDIF

lea edi, st2
lea esi, str1
mov eax, 10
mov [edi], eax
inc edi
mov eax, 13
mov [edi], eax
inc edi

m5:
mov ecx, 6
inc iden
_M5:
mov eax, 0
mov al, [esi] mov temp_ecx, ecx

pushad; сохраняем все регистры общего назначения в стек
invoke wsprintf, \; API-функция преобразования числа
ADDR stemp, \; адрес буфф, куда будет записана помет. символов
ADDR ifmt, \;адрес строки преобразования формата
eax; регистр, содержимое которого превращается

popad; считываем из стека
lea eax, stemp
mov ecx, 4
_m1:
mov dl, [eax] mov [edi], dl
inc eax
inc edi
loop _m1
inc esi
mov dl, »
mov [edi], dl
inc edi
mov ecx, temp_ecx
loop _M5
mov dl, 10
mov [edi], dl
inc edi
mov dl, 13
mov [edi], dl
. IF (iden == 1); условие
lea esi, str2
jmp m5
. ELSEIF (iden == 2); условие
lea esi, str3
jmp m5
. ENDIF

invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov stdin, eax
invoke WriteConsoleA, stdout, ADDR text, 30, NULL,NULL; VIVOD
invoke WriteConsoleA, stdout, ADDR st2, 110, NULL,NULL; VIVOD ST2
invoke Sleep,2000
invoke ExitProcess,0 возврат управления Windows
; И освобождения ресурсов
end start; директива окончания программы с именем start

Реклама

Ввести двумерный массив размером 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

Задано массивы А и В по N = 30 элементов. Привести алгоритм и программу формирования массива С по правилу: если в элементов Аi и Вi биты 4 и 9 совпадают, то Сi = Аi + Вi. Вывести соответствующие сообщения.

.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

ifmd db «Размер массива =% d. Количество одинаковых битов 4 и 9 =% d», 0

masivA dw 591,34,34,45,2,6,2, -6,1,9,8,6,4,5,45,12,12,31,46,84,54, -54, -25 , 88,70,37, -1,0,0,5,0
masivB dw 963,2,7,43,13, -7,65,9,5,100,126,145,123,2,32, -48,84,256,987,20, -54, -12, -200,4,0,0,9,8,215 ,54
masivC dw 30 dup (0)
work1 dw 0
work2 dw 0
sum dd 0
. Code; директива начала кода

_start:
mov eax, 0
mov ebx, 0
mov ecx, 30
mov edx, 0
lea esi, masivA
lea edi, masivB
lea edx, masivC

M1:

mov ax, [esi] mov bx, [edi] inc esi
inc esi
inc edi
inc edi
mov work1, ax; сохранение значений
mov work2, bx; сохранение значений
and eax, 210h; маска для проверки
and ebx, 210h;маска для проверки
. IF (eax == ebx; условие
jmp M3

. ENDIF

M2:
loop M1
jmp M4

M3:
inc sum
mov ax,work1
mov bx,work2
add ax,bx
mov [edx],ax; пересылка сумма в массив С
inc edx
inc edx
jmp M2

M4:
mov ecx,30
mov ebx,sum

invoke wsprintf,\
ADDR st2,\
ADDR ifmd,\
ecx,bx

invoke MessageBox, \
NULL, \
addr st2, \
addr st1 \
MB_OK

invoke ExitProcess, 0
end _start; окончания программы

Задано текст из 32 символов, состоящий из слов, разделенных одним пробелом. Определить количество слов и количество согласных букв в каждом слове.

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

. 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
BSIZE equ 30

. Data; директива определения данных
_a dword 3.0; сохранение в 32-разрядной ячейке памяти переменной х
_sum dword 0
sum dword 0
temp_ecx dd 0
mas1 db ‘Privet kak dela u tebya’
mas2 db ‘qwrtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM’
st1 db «Вывод количества слов:» 0
st2 db 10 dup (?), 0
ifmt db «Количество слов в тексте =% d. Количество согласных букв =% d», 0

. Code; директива начала кода
_start:
lea edi, mas1
mov ecx, 23
mov edx, 0
kol:
mov al, ‘ ‘
mov ebx, ecx
repne scasb
sub ebx, ecx
. IF (ebx> 2)
inc _sum
. ENDIF
add ecx, 0
jnz kol
lea edi, mas1
mov ecx, 23
m1:
mov al, ‘ ‘
mov bl, [edi] xor al, bl; проверка слова
jz m2
mov temp_ecx, ecx; хранения регистра
mov ecx, 40
lea esi, mas2
mov al, [esi] _S1:
. IF (al == bl); сложная условие
inc sum;подсчет количества согласных букв
jmp _mm1

. ELSE; иначе
inc esi; расчет адреса нового числа
mov al, [esi] loop _S1; перейти, если ecx? 0

. ENDIF
_mm1: mov ecx, temp_ecx ;возврат счетчика
_m1:
cld
inc edi
loop m1
jmp m3

m2:
mov edx, 0
jmp _m1

m3:
mov edx, _sum
mov eax, sum; перемещения числа согласных букв

invoke wsprintf, \
ADDR st2, \
ADDR ifmt, \
edx, eax; вывод содержимого
invoke MessageBox, \
NULL, \
addr st2, \
addr st1 \
MB_OK
invoke ExitProcess, 0
end _start; окончания программы

Задано текст из 30 символов. Сжать текст, оставив между словами по одному пропуску.

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

. 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
BSIZE equ 30

. Data; директива определения данных
_a dword 3.0; сохранение в 32-разрядной ячейке памяти переменной х
_prob dword 0
_sum dd 0

mas1 db ‘Privet kak dela u tebya’
mas2 db 30 dup (0), 0
st1 db «Вывод количества пробелов», 0
st2 db 10 dup (?), 0
ifmt db «Количество лишних пробелов в тексте =% d», 0

. Code;директива начала кода
_start:
lea edi, mas1
lea esi, mas2
mov ecx, 30; счетчик
mov edx, 1
mov ebx, 0

m1:
mov eax, 0
mov al, »
mov bl, [edi] xor al, bl; проверка равенство сроки пробел
jz m2
mov _sum, 0; сумма пробелов равна нулю
_m1: mov edx, 1
mov ax, [edi];Копирование сроки в сроке без лишних
mov [esi], ax; пробелов
inc esi
_m2:
cld
inc edi
loop m1; уменьшения счетчик
jmp m3; безусловный переход на выводок

m2:
inc _sum; инкрементирование
sub edx, _sum; проверка: это первый пробел или нет
jz _m1
mov edx, 1
inc _prob;подсчитывание лишних пробелов
jmp _m2

m3:
mov edx,0
mov edx,_prob

mov ecx,30
lea edi,mas1
mov eax,0

m4:
mov [edi],ax
inc edi
loop m4

lea edi,mas1
lea esi,mas2
mov ecx,30

m5:
mov ax,[Edi]; копирование второй строки в первую
mov [esi],x
inc esi
inc edi
cld
loop m5
invoke wsprintf, \
ADDR st2, \
ADDR ifmt, \
edx
invoke MessageBox, \
NULL, \
addr st2, \
addr st1 \
MB_OK
invoke ExitProcess, 0
end _start; окончания программы

Вычисление с выводом данных в окно консоли: Задано массив А из N = 4 элементов. Написать программу определения суммы элементов массива А, для которых биты 0 и 5 совпадают.

.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; окончания программы

Ввести 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; окончания программы

Программа расчета формулы в языке Ассемблер. Формула имеет вид: D = 4*Pi*Ha*Fi*D0/L

D = 4 * Pi * Ha * Fi * D0 / L

.386; Директива определения типа микропроцессора
. 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
BSIZE equ 30
. Data; директива определения данных
D0 dword 200;сохранение в 32-разрядной ячейке памяти переменной х
L dword 1; резервирования 32-х разрядов памяти для переменной y
Ha dd 3,4,5
Fi dd 1,2,3
const dd 4

st1 db «Результат вычисления:», 0
st2 db 10 dup (?), 0

. Code; директива начала кода
_start:
lea esi, Ha
lea edi, Fi
mov ebx, 3

m1:
mov ecx, 3
lea edi, Fi
m2:
finit
fldpi; заносим значения Пи
fimul const; Pi * 4
fild dword ptr [esi] fmul; умножаем результат на На
fild dword ptr [edi]; заносим результат Фи
fmul; умножаем результат на Фи
fild D0; заносим значение D0
fmul; умножаем результат на D0
fild L; заносим значение лянда
fdiv; делим результат на лянда
pushad; сохраняем все регистры общего назначения в стек

invoke FpuFLtoA, 0, 10, ADDR st2, SRC1_FPU or SRC2_DIMM
invoke MessageBox, NULL, addr st2, addr st1, MB_OK

popad; считываем из стека

add edi, 4;следующий элемент в массиве
loop m2
add esi, 4; следующий элемент в массиве
dec ebx
jnz m1; переходить на метку m1 пока ebx не станет равна 0

invoke ExitProcess, NULL; возврат управления Windows
; И освобождения ресурсов

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