Построить новый массив, элементы которого равны разности максимума и элементов исходного массива - Assembler

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

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

Дан массив целых чисел: 17, -5, 3, -12, 24, 78, 61, 73, -9, 13. По данному массиву целых чисел найти их максимум и построить массив, элементы которого равны разности полученного максимума и исходных элементов. Вот что я пытался сделать но при компиляции ничего не выводит.

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

textual
Листинг программы
.model tiny
 
.code
 
        org     100h
main    proc
 
        jmp     start
 
        ;Данные
        CrLf            db      0Dh, 0Ah, '$'
        msgSourceArray  db      'Source array: ', '$'
        msgResultArray  db      'Result array: ', '$'
        msgPressAnyKey  db      0Dh, 0Ah, 'Press any key to exit...', '$'
        SizeElement     equ     2
        msgMax          db      'Max: ', '$'
        Array           dw      17, -5, 3, -12, 24, 78, 61, 73, -9, 13
        N               dw      ($-Array)/SizeElement
        Max             dw      ?
 
start:
        ;программа
 
        ;исходный массив
        mov     ah,     09h
        lea     dx,     [msgSourceArray]
        int     21h
        mov     cx,     [N]
        lea     dx,     [Array]
        call    ShowArray
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
        ;обработка массива
        ; - поиск максимума
        mov     cx,     [N]
        lea     si,     [Array]
        cld
        dec     cx
        lodsw                                   ;max=a[0];
        mov     bx,     ax
        @@ForMax:                               ;for (i=1; i<n; i++)<="" span="">
                lodsw
                cmp     bx,     ax              ;  if(max<a[i])< span="">
                jge     @@NextMax
                        mov     bx,     ax      ;    max=a[i];
        @@NextMax:
        loop    @@ForMax
        mov     [Max],  bx
        ; - построить массив, элементы
        ;которого равны разности полученного
        ;максимума и исходных элементов
        mov     cx,     [N]
        lea     si,     [Array]
        @@ForProcess:                           ;for(i=0; i<n;i++)< span="">
                mov     ax,     bx              ;   b[i]=max-a[i];
                sub     ax,     [si]
                mov     [si],   ax
                add     si,     SizeElement
        loop    @@ForProcess
        ;вывод результата
        mov     ah,     09h
        lea     dx,     [msgMax]
        int     21h
        mov     ax,     [Max]
        call    ShowInt16
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
        mov     ah,     09h
        lea     dx,     [msgResultArray]
        int     21h
        mov     cx,     [N]
        lea     dx,     [Array]
        call    ShowArray
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
        ;ожидание нажатия любой клавиши
        mov     ah,     09h
        lea     dx,     [msgPressAnyKey]
        int     21h
 
        mov     ah,     00h
        int     16h
        ;завершение программы
        int     20h
main    endp
 
;Вывод массива слов (word)
;cx - количество выводимых элементов
;ds:dx - адрес массива слов
ShowArray       proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
 
        jcxz    @@saExit        ;если массив пустой - завершить
 
        mov     si,     1       ;индекс элемента массива
        mov     di,     dx      ;адрес текущего элемента массива
        @@saForI:
                mov     ax,     [di]
                call    ShowInt16
                mov     ah,     02h
                mov     dl,     ' '
                int     21h
                ;переход к следующему элементу
                inc     si
                add     di,     SizeElement
        loop    @@saForI
@@saExit:
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
ShowArray       endp
 
ShowInt16       proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
        mov     bx,     10
        xor     cx,     cx      ;символов в модуле числа
        or      ax,     ax
        jns     @@div
                neg     ax
                push    ax
                mov     ah,     02h
                mov     dl,     '-'
                int     21h
                pop     ax
        @@div:
                xor     dx,     dx
                div     bx
                push    dx
                inc     cx      ;количество цифр в числе
                or      ax,     ax
        jnz     @@div
        mov     ah,     02h
        @@store:
                pop     dx
                add     dl,     '0'
                int     21h
        loop    @@store
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
ShowInt16       endp
 
end     main</n;i++)<></a[i])<></n;>

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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