Определить количество элементов в заданном массиве, отличающихся от минимального на 5 - Assembler
Формулировка задачи:
Вот условие задачи, ребята: определить количество элементов в заданном массиве, отличающихся от минимального
на 5. Нужна помощь, пока в ассемблере ноль, вот сижу изучаю, хотя бы этот пример глянуть. Заранее спасибо, если известна какая-то литература по ассемблеру, буду благодарен, если поделитесь.
Решение задачи: «Определить количество элементов в заданном массиве, отличающихся от минимального на 5»
textual
Листинг программы
_STACK segment para stack db 1024 dup(?) _STACK ends _DATA segment N dw 20 Array dw -2, -6, 7, -6, -3, 5, -3, -3, -7, 4, 5, -4, 3, 2, -5, -4, -5, 4, -2, -5 Min dw ? CrLf db 0Dh, 0Ah, '$' _DATA ends _TEXT segment assume cs:_TEXT, ds:_DATA, ss:_STACK main proc ;инициализация сегментного регистра данных mov ax, _DATA mov ds, ax ;вывод исходного массива lea dx, [Array] mov cx, [N] call ShowArray mov ah, 09h lea dx, [CrLf] int 21h ;поиск минимального элемента mov cx, [N] lea si, [Array] mov ax, [si] FindMin: cmp ax, [si] jle FindNext mov ax, [si] FindNext: add si, 2 loop FindMin mov [Min], ax ;подсчёт количества элементов, ;отличающихся от минимального ровно на 5 mov bx, 0 mov cx, [N] lea si, [Array] mov ax, [Min] add ax, 5 CountNumber: cmp ax, [si] jne CountNext inc bx CountNext: add si, 2 loop CountNumber ;вывод результата mov ax, bx call Show_AX ;завершение программы mov ax, 4C00h int 21h main endp ; выводит знаковое 16-разрядное число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_AX proc push ax push bx push cx push dx push di mov cx, 10 xor di, di ; di - кол. цифр в числе ; если число в ax отрицательное, то ;1) напечатать '-' ;2) сделать ax положительным or ax, ax jns @@Conv push ax mov dx, '-' mov ah, 2 ; ah - функция вывода символа на экран int 21h pop ax neg ax @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стек or ax, ax jnz @@Conv ; выводим из стека на экран @@Show: pop dx ; dl = очередной выводимый символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop dx pop cx pop bx pop ax ret Show_AX endp ;Вывод массива слов (word) ;cx - количество выводимых элементов ;ds:dx - адрес массива слов ShowArray proc push ax push bx push cx push dx push si push di jcxz @@Exit ;если массив пустой - завершить mov si, 1 ;индекс элемента массива mov di, dx ;адрес текущего элемента массива @@ForI: mov ax, [di] call Show_AX mov ah, 02h mov dl, ' ' int 21h ;переход к следующему элементу inc si add di, 2 loop @@ForI @@Exit: pop di pop si pop dx pop cx pop bx pop ax ret ShowArray endp _TEXT ends end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д