Учебник по ассемблеру (ASM)
 

Ассемблер в примерах - Работа с массивом - сумма чисел

Вопрос:
найти сумму чисел, расположенных между максимальным и минимальным элементами массива


Ответ:
- массив байт, рассматриваемых как числа без знака;
- максимальный и минимальный тоже суммируются;
- вывод не предусмотрен.
.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

   Вперёд
   Содержание