Циклический сдвиг массива - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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