Преобразовать код из С++ в код Ассемблера - Assembler

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

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

Прошу о помощи. В условии надо поменять местами первую четверть массива со второй, а третью с четвертой. Нужно преобразовать данный кусок кода
int a[16] = { 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 };
    int t;
    for (int i = 0; i < 4; i++)
    {
        t = a[i];
        a[i] = a[4 + i];
        a[4 + i] = t;
    }
    for (int i = 0; i < 4; i++)
    {
        t = a[i + 8];
        a[i + 8] = a[12 + i];
        a[12 + i] = t;
    }
Результат:
a[16] = {2, 2, 2, 2, 1, 1, 1, 1, 4, 4, 4, 4, 3, 3, 3, 3};

Решение задачи: «Преобразовать код из С++ в код Ассемблера»

textual
Листинг программы
.MODEL  Small
 
.STACK  100h
 
.DATA
 
    a       db  1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 
    LenArray    equ $-a
    LenQuarter  equ LenArray / 4
 
.CODE
 
main    proc far
        ; пролог
    mov ax,@data
        mov ds,ax         ; DS = сегмент .DATA
 
 
;**********************************************
; Обмен 1 и 2 четвертей
    lea si, a
    lea di, a+LenQuarter
 
        mov     cx, LenQuarter
@@1and2:
        mov     al, [si]
        mov     bl, [di]
        xchg    al, bl
        mov     [si], al
        mov     [di], bl
        inc     si
        inc     di
        loop    @@1and2
;**********************************************
; Обмен 3 и 4 четвертей
    lea si, a+2*LenQuarter
    lea di, a+3*LenQuarter
 
        mov     cx, LenQuarter
@@3and4:
        mov     al, [si]
        mov     bl, [di]
        xchg    al, bl
        mov     [si], al
        mov     [di], bl
        inc     si
        inc     di
        loop    @@3and4
        
        ;эпилог
        mov ax,4C00h
        int 21h     ; Выходим из программы
main    endp
 
END     main

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

7   голосов , оценка 3.714 из 5