Другие языки программирования и технологии

Как на ассемблере написать процедуру для того, чтобы: эл. каждой строки матрицы циклически сдвинуть на 1 эл. влево?!

Так как вы не указываете для какого ассемблера, процессора и операционной системы должна быть написана программа, пишу для наиболее распространённого в учебном процессе сочетания:
MASM или TASM, MS DOS, i8086, 16-разрядное приложение.

.model small
.stack 100h
.data
N equ 5; Кол-во строк
M equ 7; Кол-во столбцов
;Матрица
Matrix db 246,207,93,92,40,249,192
    db 19,54,8,63,127,183,160
    db 9,175,131,7,204,121,255
    db 63,204,127,147,208,83,64
    db 37,201,152,207,232,104,12
Txt1 db 'Исходная матрица: ',13,10,36
Txt2 db 13,10,'Преобразованная матрица: ',13,10,36

.code
;Подпрограмма сдвига каждой строки матрицы на 1 элемент влево
;Входные параметры: bx - адрес левого элемента первой строки
;dh - кол-во строк, dl - кол-во столбцов
ROLMatrix proc
    push bx
    push cx
    push si
    push di
    cld
    mov cl,dh
    xor ch,ch
ROLRow:
    push cx   
    mov di,bx
    mov si,bx
    inc si
    mov cl,dl
    add bx,cx
    dec cx
    mov al,[di]
    rep movsb
    mov [di],al
    pop cx
    loop ROLRow
    pop di
    pop si
    pop cx
    pop bx
    ret
ROLMatrix endp

OutMatrix proc
    push si
    push cx
    push bx
    mov cl,dh
    xor ch,ch
    xor si,si
OutRow:
    push cx
    mov cl,dl
OutCol:
    push dx
    push cx
    mov al,[bx+si]
    inc si
    mov dl,10
    mov cx,3
DivLoop:
    xor ah,ah
    div dl
    push ax
    loop DivLoop
    mov cx,3
    mov al,20h
    int 29h
OutLoop:
    pop ax
    mov al,ah
    add al,'0'
    int 29h
    loop OutLoop
    pop cx
    pop dx
    loop OutCol
    mov al,13
    int 29h
    mov al,10
    int 29h
    pop cx
    loop OutRow
    pop bx
    pop cx
    pop si
    ret
OutMatrix endp

N92054996:
    mov ax,@data
    mov ds,ax
    mov es,ax
    lea dx,Txt1
    mov ah,9
    int 21h
    lea bx,Matrix
    mov dh,N
    mov dl,M
    call OutMatrix
    call ROLMatrix
    lea dx,Txt2
    mov ah,9
    int 21h
    lea bx,Matrix
    mov dx,N shl 8 + M
    call OutMatrix
    mov ah,8
    int 21h
    mov ah,4Ch
    int 21h
    end N92054996



P.S. Элементы матрицы 8-разрядные числа (byte). Для word, dword, qword программа будет несколько отличаться, из-за необходимости использовать соответствующую строковую команду, величиной инкремента/декремента индексных регистров и разрядностью буферного регистра (в данном случае аккумулятора).
Мамка Твоя
Мамка Твоя
51 590
Лучший ответ
На ассемблере - это трудно. А вот на VBE - можно.
Такие вопросики хорошо на http://subscribe.ru/catalog/comp.prog.assembler скопом задавать.
AM
Artak Mkrtchyan
304

Похожие вопросы