Обращение к элементам массива - Assembler

Узнай цену своей работы

Формулировка задачи:

Есть одномерный массив K размерностью 10, вывести первый и последний его элемент, удовлетворяющий условию K[1]<K[i]<K[10]. Застрял на обращении к элементам массива. (Использую FASM)

Решение задачи: «Обращение к элементам массива»

textual
Листинг программы
format PE console
include 'win32a.inc'
 
        mov     edi,K;move array address to edi
        mov     ecx,[qeK];move array dimension to ecx
        mov     bl,[edi];memorize first element of array
        push    edi
        add     edi,ecx
        dec     edi
        mov     esi,edi;memorize last element address
        mov     bh,[edi];memorize last element of array
        pop     edi
        mov     al,0;we will use al for first element that meets condition
        mov     ah,0;we will use ah for last element that meets condition
 
        inc     edi;beginning the loop from second element
        sub     ecx,2;8 times
        push    ecx
m1:
        cmp     [edi],bl;compare current element to first
        jle     m1s;ignore if lesser or equal
        cmp     [edi],bh;compare current element to last
        jge     m1s;ignore if greater or equal
        mov     al,[edi];assign first element that meets condition
        jmp     m1e;break loop
m1s:
        inc     edi;go to next element of array
        loop    m1
m1e:
 
        mov     edi,esi
        dec     edi
        pop     ecx
m2:
        cmp     [edi],bl
        jle     m2s
        cmp     [edi],bh
        jge     m2s
        mov     ah,[edi]
        jmp     m2e
m2s:
        dec     edi
        loop    m2
m2e:
 
        invoke  ExitProcess,0
 
K       db 1,2,3,4,5,6,7,8,9,10
qeK     dd $-K
 
include 'API\kernel32.inc'
 
data import
 
        library kernel32,'KERNEL32.DLL'
 
end data

Оцени полезность:

6   голосов , оценка 4.667 из 5
Похожие ответы