Найти наибольшее отрицательное число. Массив слов - Assembler (245914)
Формулировка задачи:
Найти наибольшее отрицательное число. Массив слов.
Решение задачи: «Найти наибольшее отрицательное число. Массив слов»
textual
Листинг программы
_STACK segment para stack db 1024 dup(?) _STACK ends _DATA segment N dw 16 Array dw -33, 9, 25, 95, 35, 12, 76, 36, -5, 94, 100, -72, 65, 86, -13, -5 Result dw ? MsgResult db 'The maximal negative element: ', '$' MsgNoNegative db 'In the array there is no negative elements.', 0Dh, 0Ah, '$' CrLf db 0Dh, 0Ah, '$' _DATA ends _TEXT segment assume cs:_TEXT, ds:_DATA, ss:_STACK main proc ;инициализация сегментного регистра данных mov ax, _DATA mov ds, ax mov bx, 0 ;наибольшее отрицательное число mov cx, [N] lea si, [Array] cld @@For: lodsw or ax, ax jns @@Next cmp bx, 0 jnz @@Cmp mov bx, ax @@Cmp: cmp bx, ax jge @@Next mov bx, ax @@Next: loop @@For mov [Result], bx cmp bx, 0 je @@NoFound mov ah, 09h lea dx, [MsgResult] int 21h mov ax, [Result] call ShowInt16 mov ah, 09h lea dx, [CrLf] int 21h jmp @@Exit @@NoFound: mov ah, 09h lea dx, [MsgNoNegative] int 21h ;завершение программы @@Exit: mov ax, 4C00h int 21h main endp ; выводит знаковое 16-разрядное число из регистра AX на экран ; входные данные: ; ax - число для отображения ShowInt16 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 ShowInt16 endp _TEXT ends end main
Объяснение кода листинга программы
- Наибольшее отрицательное число в массиве: -13
- Процедура поиска наибольшего отрицательного числа в массиве:
- Используется сегментный регистр данных, инициализированный сегментом _DATA.
- Переменная bx инициализируется значением 0. Переменные cx и si инициализируются ссылками на первый элемент массива.
- Цикл for выполняется, пока не будет достигнут последний элемент массива. В каждой итерации цикла, два слова (16 бит) считываются из массива в регистры ax и bx.
- Если bx < 0, то значение bx заменяется на значение ax, и цикл продолжается.
- Если bx >= 0, то значение bx заменяется на значение ax, и цикл завершается.
- Результат сохраняется в переменной bx.
- Процедура вывода наибольшего отрицательного числа:
- Если bx не равно 0, то выводится сообщение
The maximal negative element: -13
. - Если bx равно 0, то выводится сообщение
In the array there is no negative elements.
- Если bx не равно 0, то выводится сообщение