Не правильно работает ветвление в массиве чисел - Assembler

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

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

Вот есть задачка: Типо вводим 10 чисел в массив, и далее все числа которые не кратны 3 складываем . Вот при проверки равенства нулю что то не так...
      TITLE Возврат данных из процедуры через стек.
        ;Программа сделана как EXE-файл.
        ;-------------------------------
        EXTRN Vvod:FAR,Vyvod:FAR,Clear:FAR,Write_Str:FAR,Cursor:FAR
        ;----- Сегмент стека
StackSg SEGMENT PARA STACK 'Stack'
DW      256  DUP(?)
StackSg ENDS
        ;----- Сегмент данных   сдесь задают переменные
DataSg  SEGMENT PARA PUBLIC
STR1     DB      "Введите элементы массива: $"
STR2     DB      "Результат: $"
STR4     DB      "ПРОМЕЖУТОЧНОЕ ЗНАЧЕНИЕ $"
mas      DW   10 dup(?) ; типо массив с выделением памяти под слова 
summa    DW     0
SHRON    DW     ?
K        DW     3
DataSg  ENDS
        ;----- Сегмент кода
CodeSg  SEGMENT  PARA  PUBLIC
        ASSUME CS: CodeSg, DS:DataSg, SS: StackSg
Begin   PROC  FAR
        ;Пролог EXE-файла.
        PUSH DS
        XOR AX,AX
        PUSH AX
        MOV AX,DataSg
        MOV DS,AX 
        ;Конец пролога.
        CALL Clear     ;Очистка экрана.
        MOV  DX,0000h
        CALL Cursor    ;Установка курсора.
        LEA  DX,STR1
        CALL Write_Str ;Вывод строки.
    mov CX,10 ; 10 повторов
    mov SI,0  ;счетчик массива  
;-------------------начало цикла----------------------------
hicl:       
;-----------------установка курсора для красоты ------------
        mov AH,2
    mov BH,0
    mov DH,11
    SUB DH,CL
    mov DL,2
    int 10H 

;-----------------ввод чисел заполнение массива -------------------------------
    call Vvod ;введенно на этом шаге в bx
    mov mas[SI],BX 
    inc SI    
    loop hicl     ;цикл на заполнение
;-----------------------------------------------------------
    mov SI,0
    mov CX,10
 ;СОХРАНИЛИ В МАССИВЕ 
    zapusk:    
       mov DX,0;
       
           MOV  AX,mas[SI]
       mov  BP,K      
           div  BP        ; ПОДЕЛИЛИ НА 3
       sub  DX,1
     
       CMP  DX,0
       je   NOL   ;если ноль то лесом
       mul AX,K
       ADD AX,DX
           ADD   summa,AX

           NOL:
       inc SI 
    loop  zapusk

;----------------------конец основной программы
 
        MOV  DX,0d00h
        CALL Cursor    ;Установка курсора.
        LEA  DX,STR2
        CALL Write_Str ;Вывод строки.
    MOV BX,summa    
        CALL Vyvod 
        MOV AH,1       ;Задержка.
        INT 21h             
        RET
Begin   ENDP

CodeSg  ENDS
        END Begin

Решение задачи: «Не правильно работает ветвление в массиве чисел»

textual
Листинг программы
sub  DX,1

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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