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

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

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

дан массив, состоящий N целых элементов. Вычислить сумму элементов массива, расположенных между первым и последним положительным элементами. Массив и количество элементов N вводятся с клавиатуры.
вот премер, под типу моей задачи
Include io.asm                                  
Sseg SEGMENT STACK
    DB 1000 DUP(?)          ;ЋЃ‹Ђ‘’њ ‘’…ЉЂ
Sseg ENDS
 
Dseg SEGMENT
    N dw 10 DUP(?)
    X dw (?)
    Q dw (?)
    W dw (?)
    STR1 db 'Vvedite straky iz 10 chisel: $'
    STR2 db 'Summa: $'         
    STR3 db 'pervyy polozhitelnyy element: $'
    STR4 db 'posledniy polozhitelnyy element: $'
    STR5 db 'Vvedonnyy massiv: $'
Dseg ENDS
 
Cseg SEGMENT
    ASSUME CS:Cseg,DS:Dseg,SS:Sseg
    Start:
    MOV AX,Dseg         ;€Ќ€–€Ђ‹€‡Ђ–€џ ‘…ѓЊ…Ќ’Ђ „ЂЌЌ›•
    MOV DS,AX
 
    MOV AX,0
    MOV DX,0 
    LEA DX,STR1     ;ўлў®¤ бва®ЄЁ
    OUTSTR
    NEWLINE         ;ЇҐаҐе®¤ ** *®ўго бва®Єг
 
    MOV SI,0
    MOV CX,10       ;ЉЋ‹€—…‘’‚Ћ ‘€Њ‚Ћ‹Ћ‚ ‚ ‘’ђЋЉ…
    M1:
    ININT N[SI]     ;‘Ћ•ђЋЌ…Ќ€… ‘€Њ‚Ћ‹Ђ
    ADD SI,2        ;㢥«ЁзЁў*Ґ¬ бзҐвзЁЄ 
    LOOP M1         ;‡Ђ–€Љ‹€‚ЂЌ€…
 
    MOV AX,0
    MOV DX,0 
    LEA DX,STR5
    OUTSTR
    NEWLINE
    MOV SI,0
    MOV CX,10
    Q1:                 ;ўлў®¤ ¬*бЁў*
    OUTINT N[SI],4
    ADD SI,2
    LOOP Q1
    NEWLINE
 
    MOV AX,0
    MOV DX,0
    MOV SI,0
    MOV CX,10
    M2:                 ;Ї®ЁбЄ ЇҐаў®Ј® Ї®«®¦ЁвҐ«м*®Ј®
    MOV AX,N[SI]
    MOV Q,SI
    CMP DX,AX
    JG A0
    ADD SI,2
    LOOP M2
 
    A0:
    ADD Q,2 
    MOV AX,0
    MOV DX,0
    MOV DI,18
    MOV CX,10
    M3:                 ;Ї®ЁбЄ Ї®б«Ґ¤*ҐЈ® Ї®«®¦ЁвҐ«м*®Ј®
    MOV AX,N[DI]
    MOV W,DI
    CMP DX,AX
    JL A1
    SUB DI,2
    LOOP M3
 
    A1:
    MOV AX,0
    MOV DX,0 
    LEA DX,STR3
    OUTSTR
    OUTWORD Q
    NEWLINE
    MOV AX,0
    MOV DX,0 
    LEA DX,STR4
    OUTSTR
    OUTWORD W
    NEWLINE
    MOV SI,Q
    MOV DI,W    
    CMP SI,DI                               ;ЇҐаҐе®¤ Ґб«Ё ЇҐаўл© Ё Ї®б«Ґ¤*Ё© Ї®«®¦ЁвҐ«м*л© н«Ґ¬Ґ*в б®ўЇ®¤*Ґв                
    JGE A2
    MOV AX,0
    MOV AX,N[SI]
    ADD SI,2                                
    M4:
    CMP SI,DI                               ;ЇҐаҐе®¤ Ґб«Ё ўбҐ н«Ґ¬Ґ*вл б«®¦Ґ*л
    JG A3
    ADD AX,N[SI]                ;б㬬* 
    ADD SI,2
    JMP M4
    
    A2:                 ;ўлў®¤ Ґб«Ё ЇҐаўл© Ё Ї®б«Ґ¤*Ё© Ї®«®¦ЁвҐ«м*л© н«Ґ¬Ґ*в б®ўЇ®¤*Ґв
    MOV AX,0
    MOV DX,0 
    LEA DX,STR2
    OUTSTR
    OUTWORD N[SI]
 
    A3:                 ;ўлў®¤ б㬬л
    MOV X,AX
    MOV AX,0
    MOV DX,0 
    LEA DX,STR2
    OUTSTR
    OUTint X
    MOV Ah,1
    int 21h         
    MOV AX,4C00H            ;Џ…ђ…„Ђ—Ђ “ЏђЂ‚‹…Ќ€џ Ћ‘
    INT 21H
Cseg ENDS
END Start

Решение задачи: «Вычислить сумму элементов массива, расположенных между первым и последним положительным элементами»

textual
Листинг программы
Include io.asm

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

  1. Включаем файл io.asm
  2. Переменная n инициализируется значением 0
  3. Переменная sum инициализируется значением 0
  4. Переменная i инициализируется значением 0
  5. Переменная num инициализируется значением 0
  6. Цикл while для прохода по всем элементам массива
  7. Внутри цикла проверяем значение переменной num
  8. Если num больше 0, то добавляем его к переменной sum
  9. После окончания цикла выводим значение переменной sum
  10. Конец программы

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

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