Построить новый массив, элементы которого равны разности максимума и элементов исходного массива - 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;>