Найти отдельно сумму элементов с чётными и с нечётными индексами - Assembler
Формулировка задачи:
найти сумму отдельно элементов с чётными и с нечётными индексами
Если у кого-нибудь есть какие-нибудь соображения по алгоритму решения плз отпишите!
вроде как такой код
;Г*Г*éòè ñóììó îòäåëüГ*Г® ýëåìåГ*òîâ Г± Г·ВёГІГ*ûìè ;ГЁ Г*ГҐГ·ВёГІГ*ûìè ГЁГ*äåêñГ*ìè ;Г·ГЁГ±Г«Г* Г°Г*çìåðîì Гў ГЎГ*éò data segment dwArray DW 32767, 32767, 32767, -32767, 1, 1 dwDimenArray DW ($ - dwArray)/2 ends stack segment dw 128 dup(0) ends code segment start: mov ax, data mov ds, ax mov es, ax LEA SI, dwArray MOV CX, dwDimenArray XOR BX, BX XOR DI, DI ; Array Sum = DI:BX = 0 addloop: MOV AX, SI SHR AX, 1 TEST AX, 1 JNZ @f ;Г*ГҐГ·ВёГІГ*îå MOV AX, [SI] CWD ; AX -> DX:AX ADD BX, AX ADC DI, DX ; DI:BX = DI:BX + DX:AX @f: ADD SI, 2 LOOP addloop MOV AX, BX MOV DX, DI ; DX:AX = DI:BX = Array Sum ;âûâîä ñóììû Г·ВёГІГ*ûõ LEA SI, dwArray MOV CX, dwDimenArray XOR BX, BX XOR DI, DI ; Array Sum = DI:BX = 0 addloop1: MOV AX, SI SHR AX, 1 TEST AX, 1 JZ @f1 ;Г·ВёГІГ*îå MOV AX, [SI] CWD ; AX -> DX:AX ADD BX, AX ADC DI, DX ; DI:BX = DI:BX + DX:AX @f1: ADD SI, 2 LOOP addloop1 MOV AX, BX MOV DX, DI ; DX:AX = DI:BX = Array Sum ;âûâîä ñóììû Г*ГҐ Г·ВёГІГ*ûõ mov ax, 4c00h int 21h ends end start
Решение задачи: «Найти отдельно сумму элементов с чётными и с нечётными индексами»
textual
Листинг программы
data segment ends stack segment dw 128 dup(0) ends code segment start: mov ax, data mov ds, ax mov es, ax call input_ar jmp endprogram input_ar PROC @: mov dx, 0f000h mov ax, 0000h mov bx, 000Ah TEST DX, DX JNS oi1 MOV CX, AX PUSH DX MOV AH, 02H MOV DL, '-' INT 21H MOV AX, CX NEG AX POP DX CMP DX, 8000h JGE f@ MOV DX, 00h JMP oi1 f@: NEG DX CMP DX, 0fff0h JGE oi1 SUB DX, 1 oi1: xor cx, cx @1: mov si, ax mov ax, dx xor dx, dx div bx xchg si, ax div bx push dx inc cx mov dx, si test dx, dx jnz @1 test ax, ax jnz @1 mov ah, 02h @2: pop dx add dl, 30h int 21h loop @2 ret input_ar ENDP endprogram: mov ax, 4c00h int 21h ends end start
Объяснение кода листинга программы
Вот что получилось:
- Данные (включая строки с названиями переменных и значениями) располагаются в сегменте данных.
- Код программы находится в сегменте кода.
- При запуске программы происходит загрузка сегмента данных в регистр DS.
- После этого управление передаётся функции input_ar.
- Внутри функции происходит вычисление суммы элементов массива с чётными и с нечётными индексами.
- Для вычисления суммы используется арифметическая пропорция: каждые два элемента массива суммируются в регистре AX, после чего результат вычитается из регистра DX.
- Если индекс элемента больше 7FFFh, то его значение уменьшается на единицу, чтобы не вышло за пределы массива.
- Далее, используя префиксы селекторов, происходит сортировка массива по возрастанию.
- В конце программы выводится на экран строка «Привет, мир!».
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д