Консультация № 187573
15.10.2013, 16:58
100.51 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Задал преподаватель написать программу подсчета положительных элементов массива типа Word. Реализовать надо с помощью Nsam.
Вот что у меня получилось:

Код:

SECTION .data
MAS: dw 1,1,2,-5,5,-3 /массив

SECTION .text
org 0x100

START:
mov si,0 /обнуление счетчиков
mov bl,0
mov dh,0
FOR_LOOP: /цикл
mov al,[MAS+si]
cmp al,bl
ja CHETCHIK

METKA:
inc si /наращивает счетчик прогонов
cmp si,6 /пока не будет 6 элементов по колву чисел в массиве
jne FOR_LOOP
jmp FINISH

CHETCHIK:
inc dh /наращиваем счётчик положительных элементов
jmp METKA

FINISH:
mov dl,ah /вывод
add DL,'0'
mov dh, 0x02
int 0x21
mov aH,0x4C
int 0x21
int 0x21

Вот только ничего она не выводит.
В чём я ошибся?

Обсуждение

давно
Посетитель
7438
7205
15.10.2013, 17:27
общий
это ответ
Здравствуйте, Пока Что Студент!
Посмотрите исправленную версию.
Будет непонятно, спрашивайте в мини-форуме
Код:
SECTION .data
MAS: db 1,1,2,-5,5,-3 ;массив (не dw !!!!) байтов
SECTION .text
org 0x100
START:
mov si,0 ;обнуление счетчиков
mov bl,0
mov dh,0
FOR_LOOP: ;цикл
mov al,[MAS+si]
cmp al,bl
jg CHETCHIK ;а не ja CHETCHIK !!!!
METKA:
inc si ;наращивает счетчик прогонов
cmp si,6 ;пока не будет 6 элементов по колву чисел в массиве
jne FOR_LOOP
jmp FINISH
CHETCHIK:
inc dh ;наращиваем счётчик положительных элементов
jmp METKA
FINISH:
mov dl,dh ;вывод (не mov dl,ah !!!!)
add DL,'0'
mov ah, 0x02 ;не mov dh, 0x02 !!!!
int 0x21
mov aH,0x4C
int 0x21

Ваша программа работает с байтами, поэтому я исправил данные на байты.
Потом посмотрел условие и увидел там Word. Вот Вам версия для работы со словами. Сравните:
Код:
SECTION .data
MAS: dw 1,1,2,-5,5,-3 ;массив
SECTION .text
org 0x100
START:
mov si,0 ;обнуление счетчиков
mov bx,0
mov dh,0
FOR_LOOP: ;цикл
mov ax,[MAS+si]
cmp ax,bx
jg CHETCHIK ;а не ja !!!!
METKA:
add si,2 ;наращивает счетчик прогонов
cmp si,12 ;пока не будет 6 элементов по колву чисел в массиве
jne FOR_LOOP
jmp FINISH
CHETCHIK:
inc dh ;наращиваем счётчик положительных элементов
jmp METKA
FINISH:
mov dl,dh ;вывод (не mov dl,ah !!!!)
add DL,'0'
mov ah, 0x02 ;не mov dh, 0x02 !!!!
int 0x21
mov aH,0x4C
int 0x21

Ну и еще одна версия, как я бы сделал:
Код:
SECTION .data
MAS: dw 1,1,2,-5,5,-3 ;массив
len equ ($-MAS)/2
SECTION .text
org 0x100
START:
lea si,[MAS]
mov cx, len
mov dl, 0
FOR_LOOP: ;цикл
lodsw
test ax, ax
jle METKA
inc dl ;наращиваем счётчик положительных элементов
METKA:
loop FOR_LOOP
add DL,'0'
mov ah, 0x02
int 0x21
mov ah,0
int 16h ;ждем нажатие клавиши
mov aH,0x4C
int 0x21
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа