Не правильно работает ветвление в массиве чисел - 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