Сумма нечетных чисел массива двойных слов - 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
Объяснение кода листинга программы
Список элементов кода:
- Объявление сегментов данных и кода
- Объявление переменных
- Начало выполнения программы
- Вызов процедуры abc
- Передача в процедуру abc счетчика количества нечетных чисел и указатель на массив нечетных чисел
- Вложенные циклы для обработки каждого нечетного числа в массиве
- Тест на четность числа
- Если число четное, то переход к следующей итерации цикла
- Если число нечетное, то добавление его в сумму
- Передача в процедуру abc нового значения счетчика и указателя на массив нечетных чисел
- Продолжение выполнения программы
- Завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д