Преобразовать код из С++ в код Ассемблера - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д