 |
Ассемблер в примерах - Поиск элементов в массиве и вывод на экран
- Вопрос:
- Как написать программу для поиска минимально и максимального элемента в массиве,с вводом и выводом массива на экран.При написании использовать команду Lea тоесть адресацию массива.
- Ответ:
- Нужно получить исполняемый файл формата СОМ
Размер массива определяется "автоматически", так что просто добавляйте или удаляйте элементы
Пример окна вывода программы:
Исходный массив:12 23 -3 4 0 7
Минимальный элемент массива: -3
Максимальный элемент массива: 23
Press any key ..
.model tiny; нужно будет получить исполняемый файл формата СОМ
.code
org 100h
start:
mov ax, 3
int 10h ; устанавливаем текстовый режим
lea dx, srcArray
mov ah, 9
int 21h
cld ; буду использовать строковые инструкции
; установим флаг направления
mov cx, arsize
lea si, ar
@@_next:
lodsw
CALL writeWordDEC_signed
mov al, ' '
int 29h
int 29h
LOOP @@_next
; определение минимального и максимального
lea si, ar
lodsw
mov min_el, ax
mov max_el, ax
mov cx, arsize
@@_analize_next:
lodsw
cmp ax, min_el
jge @@10
mov min_el, ax
@@10:
cmp ax, max_el
jle @@20
mov max_el, ax
@@20:
LOOP @@_analize_next
lea dx, minElem
mov ah, 9
int 21h
mov ax, min_el
CALL writeWordDEC_signed
lea dx, maxElem
mov ah, 9
int 21h
mov ax, max_el
CALL writeWordDEC_signed
lea dx, PressKey
mov ah,9
int 21h
xor ax, ax
int 16h
int 20h
; две подпрограммы для вывода чисел на экран
writeWordDEC proc near
; вывод на экран слова в AX, воспринимается как беззнаковое
push ax
push bx
push dx
push cx
mov bx, 10
xor cx, cx
@@1:
xor dx, dx
div bx
push dx
inc cx
or ax, ax
jnz @@1
@@2:
pop ax
add al, '0'
int 29h ; это прерывание умеет делать только одно -
; выводить символ в AL на экран
LOOP @@2
pop cx
pop dx
pop bx
pop ax
ret
writeWordDEC endp
WriteWordDEC_signed proc
; вывод на экран слова в AX как знакового
; просто, если отрицательное, выводит минус, превращает в
; положительное и вызывает подпрограмму writeWordDEC
or ax, ax
jns @@_no_sign
push ax
mov al, '-'
int 29h
pop ax
neg ax ; изменение знака на +
@@_no_sign:
CALL writeWordDEC
ret
WriteWordDEC_signed endp
PressKey db 13,10,10,'Press any key ...$'
srcArray db 'Исходный массив:',13,10,'$'
maxElem db 13,10,'Максимальный элемент массива: $'
minElem db 13,10,'Минимальный элемент массива: $'
ar dw 12, 23, -3, 4, 0, 7 ; сюда просто добавляйте числа, если хотите
arsize equ ($ - ar)/2 ; так определяется констата = размер массива в словах (число элементов)
; $ - операция вычисления текущего адреса
min_el dw ?
max_el dw ?
end start
|  |