Сумма нечетных чисел массива двойных слов - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Если все элементы двойные слова, то сумма должна иметь другой тип что бы не выйти из диапазона типа?

Решение задачи: «Сумма нечетных чисел массива двойных слов»

textual
Листинг программы
.model small
 
data segment
    x1  dw 166Ah
        dw 8A8h
        
        dw 0FD2Eh
        dw 0B669h   
        
        dw 0A029h
        dw 0F205h   
        
        dw 0E6A1h
        dw 0B538h   
        
        dw 0A4B4h
        dw 0F25h    
        
        dw 0F0AFh
        dw 0F335h   
        
        dw 0001h
        dw 8000h
            
    y1  dw 3 dup(0)
 
    x2  dw 445Ch
        dw 0B5BFh
        
        dw 705Ch
        dw 0E6A5h
        
        dw 02D2h
        dw 4996h
        
        dw 6E0Fh
        dw 0FE98h
        
        dw 0D665h
        dw 779h
        
        dw 6EC3h
        dw 0EC96h
        
    y2  dw 3 dup(0)
data ends
 
stk segment stack
    db 255 dup(?)
stk ends
 
code segment
assume cs:code,ds:data,ss:stk 
start:  
mov ax,data
mov ds,ax
 
lea ax,x1            
push ax
lea ax,y1
push ax
mov ax,7
push ax
call abc
    
lea ax,x2
push ax
lea ax,y2
push ax
mov ax,6
push ax
call abc
 
mov ah,4Ch
mov al,00h
int 21h
 
abc proc
    push bp
    mov bp,sp 
    
    mov cx,[bp+4]        
    mov di,[bp+6]        
    mov si,[bp+8]       
            
    M1: 
    mov ax,[si]        
    mov dx,[si+2]      
    test dx,8000h     
    jz m2             
          
    add [di],ax   
    mov ax,[si+2]
    cwd          
    adc [di+2],ax
    adc [di+4],dx
    
    M2: 
    add si,4
    dec cx
    jnz m1
    
    pop bp
 
    ret 6
abc endp
code ends
end start

Объяснение кода листинга программы

Список элементов кода:

  1. Объявление сегментов данных и кода
  2. Объявление переменных
  3. Начало выполнения программы
  4. Вызов процедуры abc
  5. Передача в процедуру abc счетчика количества нечетных чисел и указатель на массив нечетных чисел
  6. Вложенные циклы для обработки каждого нечетного числа в массиве
  7. Тест на четность числа
  8. Если число четное, то переход к следующей итерации цикла
  9. Если число нечетное, то добавление его в сумму
  10. Передача в процедуру abc нового значения счетчика и указателя на массив нечетных чисел
  11. Продолжение выполнения программы
  12. Завершение программы

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы