Задачка про матрицы - Assembler

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

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

Доброго времени суток! имеется такая задачка - все положительные элементы матрицы С(M,N) разделить на константу Е, все отрицательные - умножить на нее. M=3, N=3,E=4 Вот все, что я смог по ней наплодить, ассемблер пока вещь абсолютно незнакомая, подмогите пожалуйста
.286
.model small
.stack 100h
.data
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            matr db -1 4 8
             db -3 -4 16
             db 4 4 -2
.code
begin:
        mov ax, @data
        mov ds, ax
        mov si, 1 ; s4et4ik
        mov ah,9 ;ostalos' elementov
     m1:
        cmp ax[si],0
        jge div 4
        jl imul 4
        dec ah
        cmp ah,0
        jz int 21h
     end m1
 
end begin
большое спасибо

Решение задачи: «Задачка про матрицы»

textual
Листинг программы
.286
.model small
.stack 100h
.data
        matr db -1,4,-2,8,-5,12,-3,4,4
 
.code
.startup
    mov ax,@data
    mov ds,ax
    lea bx,matr
    mov si,3*3-1 ; длина массива
    loop0: ;
        mov al,[bx+si] ;записываем в переменную si-ый член массива
        xor ah,ah ; в ah получается, что записываем 0
        mov cl,2   ;   записываем в cl 2(ибо 4 это 2 во второй)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
        or al,al      ;   сравниваем с нулем( тоже что и cmp al 0)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
        jns pos ;  если правда, то перескакиваем на pos
            add cl,12 ; если неправда, то к cl прибавляем 12? и тогда вправо сдвигаем на 14 битов?
        pos: 
        ror ax,cl  ;делим на 4 
        mov [bx+si],al ; записываем на место в массиве нашу измененную переменную
        dec si ; уменьшаем количество непройденных элементов
        jns loop0 ; идем в начало цикла
    mov ax,4c00h
    int 21h
end

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


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

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

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