Получить матрицу, элемент bij которой равен произведению элемента aij исходной матрицы на максимум i строки - Assembler

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

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

Здравствуйте Помогите пожалуйста с задачей Необходимо получить новую матрицу В, элемент bij которой равен произведению элемента aij исходной матрицы на максимум i строки. То есть если имеется матрица: 2 3 4 0 1 0 5 2 3 9 11 4 То новая матрица будет выглядеть так: 8 12 16 0 //умножаем на максимум, то есть на 4 5 0 25 10 //умножаем на максимум, то есть на 5 33 99 121 44 //умножаем на максимум, то есть на 11 На С# эта задача не представляет никаких проблем. Но вот как можно сделать ее на ассемблере?

Решение задачи: «Получить матрицу, элемент bij которой равен произведению элемента aij исходной матрицы на максимум i строки»

textual
Листинг программы
  1. org 100h
  2. jmp start
  3.  
  4. mess0   db  13,10,' Current array:'
  5.         db  13,10,'----------------',13,10,'$'
  6. mess1   db  13,10,10,' New array:'
  7.         db  13,10,'----------------',13,10,'$'
  8.  
  9. crlf    db  13,10,'$'            ; для построения матрицы
  10. mult    db  0,0,0,0,0            ; максимальное каждой строки (множители)
  11.  
  12. array   db  7,6,3,2,1            ; массив
  13.         db  0,4,5,6,8            ;
  14.         db  5,1,2,3,5            ;
  15.         db  6,9,5,4,2            ;
  16.         db  1,3,6,9,8            ;
  17.  
  18. start:                           ;
  19.        mov   dx,mess0            ;
  20.        call  Message             ;
  21.        call  printArray          ; выводим его на экран
  22.  
  23.        call  FindMax             ; ищем мах.каждой строке
  24.        call  createNewArray      ; создаём новый массив
  25.  
  26.        mov   dx,mess1            ;
  27.        call  Message             ;
  28.        call  printArray          ; выводим его на экран
  29.  
  30. exit:  xor   ax,ax               ;
  31.        int   16h                 ;
  32.        int   20h                 ; выход!
  33.  
  34. ;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
  35. Message:                         ;
  36.        mov   ah,9                ;
  37.        int   21h                 ;
  38.        ret
  39. ;----------------------<--- Выводим массив на экран --------------
  40. printArray:                      ;
  41.        mov   bx,5                ; колонок в строке
  42.        mov   cx,25               ; длина массива
  43.        mov   si,array            ; его адрес
  44. kLoop: xor   ax,ax               ;
  45.        lodsb                     ; читаем байт из SI
  46.        aam                       ;
  47.        or    ax,3030h            ;
  48.        xchg  ah,al               ;
  49.        int   29h                 ;
  50.        xchg  ah,al               ;
  51.        int   29h                 ; выводим его в DEC
  52.        mov   al,','              ; вставляем разделитель
  53.        int   29h                 ;
  54.        dec   bx                  ;
  55.        jnz   next2               ; выводим одну строку
  56.        mov   dx,crlf             ; перевод строки
  57.        call  Message             ;
  58.        mov   bx,5                ; восстановим счётчик колонок
  59. next2: loop  kLoop               ;
  60. ret
  61. ;----------------------<--- Ищем максимальное в каждой строке -----
  62. FindMax:                         ;
  63.        xor   ax,ax               ;
  64.        mov   bx,5                ; всего строк
  65.        mov   cx,bx               ; всего колонок
  66.        mov   si,array            ;
  67.        mov   di,mult             ; адрес для сохранения множителей
  68. mLoop: lodsb                     ;
  69.        cmp   ah,al               ;
  70.        ja    next3               ;
  71.        xchg  ah,al               ; в AH будет максимальное
  72. next3: loop  mLoop               ;
  73.        shr   ax,8                ; проверили очередную строку!
  74.        stosb                     ; сохраняем её макс.байт
  75.        mov   cx,5                ; сбрасываем колонки
  76.        dec   bx                  ; все строки проверили?
  77.        jnz   mLoop               ;
  78. ret
  79. ;----------------------<--- Создаём новый массив -------------------
  80. createNewArray:                  ;
  81.        xor   ax,ax               ;
  82.        mov   bx,mult             ; адрес таблицы множителей
  83.        mov   cx,5                ; колонок,
  84.        mov   dx,cx               ;    ..и столько-же строк
  85.        mov   si,array            ;
  86.        mov   di,si               ;
  87. nLoop: lodsb                     ; умножаем строку на первый множитель
  88.        mul   byte[bx]            ;
  89.        stosb                     ;
  90.        loop  nLoop               ;
  91.        mov   cx,5                ; сброс колонок
  92.        inc   bx                  ; сл.множитель
  93.        dec   dx                  ; все строки обработали?
  94.        jnz   nLoop               ;
  95. ret                              ;

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


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

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

13   голосов , оценка 4.231 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы