Пример задачи с использованием массива на ассемблере: Заданы массивы A и В из N = 8 элементов. Сформировать новый массив С по правилу: если у элементов Ai и Bi биты 0, 1 и 2 совпадают, то Ci = А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
ifmt db "%d",0
masivA db 7,34,34,45,2,6,2-6
masivB db 54,2,7,43,13-7,65,9
masivC db 8 dup(0)
work1 db 0
work2 db 0
prom dd 0
.code ; директива начала кода программы
_start:
mov eax,0
mov ebx,0
mov ecx,8
mov edx,0
lea esi, masivA
lea edi, masivB
lea edx, masivC
M1:
mov prom,ebx
mov al, byte ptr[esi+ebx]
mov bl, byte ptr[edi+ebx]
mov work1, al
mov work2, bl
and eax,07h
and ebx,07h
sub eax,ebx
jz M3
M2:
mov ebx, prom
inc ebx
loop M1
jmp M4
M3:
mov al, work1
mov bl, work2
add al,bl
mov [edx+ebx],al
jmp M2
M4:
mov edx,0
mov ecx,08h
Prom:
lea esi,masivC;
mov al[esi+edx]
cmp al,0
jnz _M2
_M1: inc edx
loop Prom
jmp _M3
_M2:
mov ebx,eax
jmp _M1
_M3:
invoke wsprintf \
ADDR st2 \
ADDR ifmt \
ebx
invoke MessageBox \
NULL \
addr st2 \
addr st1 \
MB_OK
invoke ExitProcess,0
end _start ; окончание программы
Результат работы программы