Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10653
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 3992
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 1762
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1547
Дата выхода:18.10.2013, 17:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:46 / 24
Вопросов / ответов:1 / 1

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

Код :
...

Консультация # 187573:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Задал преподаватель написать программу подсчета положительных элементов массива типа 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

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

Дата отправки: 15.10.2013, 16:58
Вопрос задал: Пока Что Студент (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Пока Что Студент!
Посмотрите исправленную версию.
Будет непонятно, спрашивайте в мини-форуме smile

Код :
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

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 15.10.2013, 17:27
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное