 |
Ассемблер в примерах - Работа с массивом - сумма чисел
- Вопрос:
- найти сумму чисел, расположенных между максимальным и минимальным элементами массива
- Ответ:
-
- массив байт, рассматриваемых как числа без знака;
- максимальный и минимальный тоже суммируются;
- вывод не предусмотрен.
.model tiny
.386
.code
org 100h
start:
xor dx, dx ; будет сумма, там и так нуль, но для "порядка"
lea si, mass
mov bx, si ; bx - адрес минимального
mov di, si ; di - адрес максимального
; ищем номер минимального
mov cx, len-1
@@min:
inc si
mov al, [si]
cmp al, [bx]
jae @@1
mov bx, si
@@1:
cmp al, [di]
jbe @@2
mov di, si
@@2:
loop @@min
mov min, bx
mov max, di
; какой адрес больше?
xor ah, ah ; нужно обнулить AH
cmp di, bx
je @@equal ; все одинаковые элементы
jb @@low
mov si, bx
sub di, bx
inc di
mov cx, di
jmp @@summ
@@low: ; максимальный младше
mov si, di
sub bx, di
inc bx
mov cx, bx
@@summ:
mov al, [si]
add dx, ax
inc si
loop @@summ
@@equal:
mov sum, dx
int 20h
mass db 10,4,2,3,1,6,7,8
len equ $ - mass ; так вычисляется размер массива в байтах
min dw ?
max dw ?
sum dw 0
end start
|  |