Циклический сдвиг массива - Assembler (224526)
Формулировка задачи:
Помогите сделать циклический сдвиг массива вправо.Там вроде сдвигает , но появляются ненужные цифры.
И еще можете подсказать как можно сдвинуть массив через ror,rol.
.686 .MODEL FLAT,stdcall option casemap:none .XLIST include \masm32\include\masm32rt.inc .LIST .DATA mas_a dd 6, 9, 5, -17, 4, -7, 11 nx dd 7 titleString db 'Lab3',0 bufff db 20 dup (' ') Cr_Lf db 13,10,0 msg1 db 'массив x',0 msg2 db " размером = ",0 msg3 db "Преобразованный массив ",0 .DATA? max_x dd ? max_p_x dd ? .CODE lab3: start: call CreateConsole invoke StdOut,addr msg1 invoke StdOut,addr msg2 mov eax,nx call PrintNumber invoke StdOut,addr Cr_Lf lea ebx,mas_a mov ecx,nx call PrintArray invoke StdOut,addr Cr_Lf xor ESI,ESI xor EDI,EDI mov ECX,nx mov EDX,mas_a[ECX*4] c1: dec ECX mov EAX,mas_a[ECX*4] inc ECX mov mas_a[ECX*4],EAX loop c1 mov mas_a[0],EDX ;vuvod rezyltatov ;invoke StdOut,addr msg3 ;pechat strok msg3, msg4 ; invoke StdOut,addr msg4 invoke StdOut,addr msg3 invoke StdOut,addr Cr_Lf lea ebx,mas_a mov ecx,nx call PrintArray invoke StdOut,addr Cr_Lf inkey ;ostanovka programmu exit ;vuxod inkey exit PrintNumber proc push ecx push ebx invoke wsprintf, addr bufff, chr$("%4d"), eax invoke StdOut, addr bufff pop ebx pop ecx ret PrintNumber endp PrintArray proc c2: mov eax,[ebx] call PrintNumber add ebx,4 loop c2 PrintArray endp CreateConsole proc invoke AllocConsole invoke SetConsoleTitle,offset titleString invoke SetConsoleOutputCP,1251 invoke SetConsoleCP,1251 ret CreateConsole endp end lab3
Решение задачи: «Циклический сдвиг массива»
textual
Листинг программы
; сохранять в ДОС-кодировке. .686 .MODEL FLAT,stdcall option casemap:none include \masm32\include\msvcrt.inc includelib \masm32\lib\msvcrt.lib .stack .DATA mas_a dd 6, 9, 5, -17, 4, -7, 11 titlestr db 'Lab3',0 nx dd (titlestr-mas_a)/4 ;bufff db 20 dup (' ') Cr_Lf db 13,10,0 msg1 db 'массив x',0Dh, 0Ah msg2 db " размером = %d",0Dh, 0Ah,0 msg3 db "Преобразованный массив :",0Dh, 0Ah,0 tpt db '%d ',0 .DATA? max_x dd ? max_p_x dd ? .CODE lab3: start: invoke crt_printf, addr msg1, nx lea ebx, mas_a mov ecx, nx call PrintArray xor ESI,ESI xor EDI,EDI mov ECX,nx mov EDX,mas_a[ECX*4-4] c1: dec ECX mov EAX,mas_a[ECX*4] inc ECX mov mas_a[ECX*4],EAX loop c1 mov mas_a[0],EDX ;vuvod rezyltatov invoke crt_printf, addr msg3 lea ebx, mas_a mov ecx,nx call PrintArray invoke crt_exit,0 ;vuxod PrintArray proc c2: mov eax,[ebx] push ebx push ecx invoke crt_printf, addr tpt, eax pop ecx pop ebx add ebx,4 loop c2 invoke crt_printf, addr Cr_Lf ret PrintArray endp end lab3
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д