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

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


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

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

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

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

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

Номер выпуска:1551
Дата выхода:25.11.2013, 11:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:44 / 21
Вопросов / ответов:1 / 1

Консультация # 187629: Здравствуйте! Прошу помощи в следующем вопросе: Видел похожую задачу http://rfpro.ru/question/178004 Пожалуйста, помогите составить код к лабораторной работе и прокомментируйте 1ый пункт задания. Разработать программу на языке Ассемблера. Программа должна иметь все необходимые «псевдооператоры», которые позволяли бы загрузи...


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

Здравствуйте! Прошу помощи в следующем вопросе:

Видел похожую задачу http://rfpro.ru/question/178004

Пожалуйста, помогите составить код к лабораторной работе и прокомментируйте 1ый пункт задания.

Разработать программу на языке Ассемблера.
Программа должна иметь все необходимые «псевдооператоры», которые позволяли бы загрузить ее непосредственно в среду. Коды программы должны начинаться с 0000Н, байтовые переменные — с 08Н, стек — с 60Н, битовые переменные — с 20Н, внешнее ОЗУ — с 0000Н. Ассемблирование вручную приводить не надо.

Cоставить программу проверки элементов массива на 0. Числа располагаются во внутренней памяти, начиная с адреса 10Н по ЗfН. Надо зафиксировать адреса нулевых элементов массива и запомнить их во внутренней памяти. Отчет должен содержать: 1. Распределение памяти ОЭВМ для решения задачи 2. Распределение переменных в указанных выше пространствах памяти. З. Cтруктурную схему алгоритма этой программы. 4. Листинг отлаже нной программы. 5. Контрольный пример для запуска программы.
Спасибо!

Дата отправки: 22.11.2013, 11:03
Вопрос задал: Alex (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, Alex!
Предлагаю Вашему вниманию следующую программу, решающую Вашу задачу.
Попробуйте сначала понять ее работу самостоятельно. Будут вопросы - спрашивайте в мини-форуме

Код :
;Программа проверки элементов массива на 0. 
;Числа располагаются во внутренней памяти, начиная с адреса 10Н по ЗfН. 
;Надо зафиксировать адреса нулевых элементов массива и запомнить их 
;во внутренней памяти. Отчет должен содержать: 
;1. Распределение памяти ОЭВМ для решения задачи 
;2. Распределение переменных в указанных выше пространствах памяти. 
;З. Cтруктурную схему алгоритма этой программы. 
;4. Листинг отлаженной программы. 
;5. Контрольный пример для запуска программы.

array_i	equ	10h		;адрес исходного массива
count	equ	30h		;количество = 3fh - 10h + 1
array_o	equ	40h		;= array_i + count, сюда запишем адреса нулевых
				;его длина равна исходному (могут быть все нули)
start	equ	0
stack	equ	70h		;вершина стека = array_o + count

	org	start
	mov	sp, #stack	;стек
;-------------
;контрольный пример
	mov	r0, #array_i	;заполним буфер
	mov	a, 1		;значениями, начиная с 1
	mov	r1, #count	;количество
fill_loop:
	mov	@r0, a		;сохраняем
	inc	a		;с шагом 1
	anl	a, #03h		;чтобы были числа 0,1,2,3,0,1,2,3,...
	djnz	r1, fill_loop	;в массиве будут числа 1,2,3,0,1,2,3,0,1,...
;-------------
	mov	r0, #array_i	;адрес исходного массива во внутренней памяти
	mov	r1, #array_o	;адрес результирующего массива во внутренней памяти
	mov	r2, #count	;количество элементов массива
loop:				;цикл по складыванию элементов массива
	mov	a, @r0		;читаем в аккум из внутренней памяти байт по адресу [r0]
	jnz	next		;проверяем аккум на 0, не 0 - на следущий
	mov	@r1, 0		;а=0 - сохраняем его индекс r0, 
				;но обращаемся, как к ячейке памяти 0! 
	inc	r1		;увеличиваем индекс в масиве нулевых
next:
	inc	r0		;увеличиваем индекс в исходном массиве
	djnz	r2, loop	;r2=r2-1; циклим, пока r2!=0

				;посчитаем количество нулевых
	clr	c		;сбросим С (для subb)
	mov	a, r1		;адрес конца заполненного массива
	subb	a, #array_o	;a = конец - начало - C
				;в аккум количество нулевых элементов
	jmp	$		;задача решена, организовываем бесконечный цикл:
				; крутимся на одном месте
	end

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

5
огромное спасибо!
-----
Дата оценки: 23.11.2013, 19:01

Рейтинг ответа:

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


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

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

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



В избранное