Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2012, 13:48   #1
left8
Новичок
Джуниор
 
Регистрация: 05.02.2012
Сообщений: 1
По умолчанию (ассемблер)

Постоянно опрашивать АЦП и выводить в порт вывода среднее арифметическое двух соседних опросов. Учесть, что АЦП формирует двенадцатиразрядный код, состоящий из прямого одиннадцатиразрядного двоичного кода модуля амплитуды аналогового напряжения и двенадцатого знакового бита. Единица в двенадцатом бите соответствует отрицательному входному напряжению, а ноль – положительному. Среднее арифметическое представлять прямым пятнадцатиразрядным кодом с шестнадцатым знаковым битом. Считать, что аналоговые сигналы нормированы к входному напряжению АЦП. Выполнить трансляцию в объектную программу.

Листинг и трансляция программного кода есть.
Осталось разобраться с алгоритмом, т.е подсказать что где происходит в трансляции программы

ТРАНСЛЯЦИЯ ПРОГРАММЫ.
Код:
Код	Адрес	Метка	Операция	Операнд	Комментарий 
DB	8000	LOOP:	IN	01h	Считываем младший байт
01	8001				
4F	8002		MOV	C,A	Сохраняем в регистр С
DB	8003		IN	02h	Считываем старший байт
02	8004				
47	8005		MOV 	B,A	Сохраняем в регистр В
E6	8006		ANI	08h	Накладываем маску (00001000)
08	8007				
C2	8008		JNZ	M0	Проверяем на знак, если отрицательно, то переходим на М0
0E	8009				
80	800A				
C3	800B		JMP	M1	Если положительно, то М1
1F	800C				
80	800D				
78	800E	M0:	MOV	A,B	Перевод в дополнительный код
EE	800F		XRI	08h	Обнуляем старшие 5 бит старшего байта
08	8010				
2F	8011		CMA		Делаем инверсию старшего байта
47	8012		MOV	B,A	
79	8013		MOV	A,C	
2F	8014		CMA		Делаем инверсию младшего байта
C6	8015		ADI	01h	Прибавляем 1 к младшему байту
01	8016				
4F	8017		MOV	C,A	
D2	8018		JNC	M1	Проверяем если нет переноса, то переходим на М1
1F	8019				
80	801A				
78	801B		MOV	A,B	
C6	801C		ADI	01h	Если перенос есть, то прибавляем 1 к старшему байту
01	801D				
47	801E		MOV	B,A	
DB	801F	M1:	IN	01h	Считываем следующий код (младший)
01	8020				
5F	8021		MOV	E,A	Сохраняем в регистр Е
DB	8022		IN	02h	Считываем старший байт
02	8023				
57	8024		MOV	D,A	Сохраняем в регистр D
E6	8025		ANI	08h	Накладываем маску (00001000)
08	8026				
C2	8027		JNZ	M2	Проверяем на знак, если отрицательно, то переходим на М2
2D	8028				
80	8029				
C3	802A		JMP	M3	Если положительно, то М3
3E	802B				
80	802C				
7A	802D	M2:	MOV	A,D	Перевод в дополнительный код
EE	802E		XRI	08h	Обнуляем старшие 5 бит старшего байта
08	802F				
2F	8030		CMA		Делаем инверсию старшего байта
57	8031		MOV	D,A	
7B	8032		MOV	A,E	
2F	8033		CMA		Делаем инверсию младшего байта
C6	8034		ADI	01h	Прибавляем 1 к младшему байту
01	8035				
5F	8036		MOV	E,A	
D2	8037		JNC	M3	Проверяем если нет переноса, то переходим на М1
3E	8038				
80	8039				
7A	803A		MOV	A,D	
C6	803B		ADI	01h	Если перенос есть, то прибавляем 1 к старшему байту
01	803C				
57	803D		MOV	D,A	
EB	803E	M3:	XCHG		DE< - >HL
09	803F		DAD	BC	Двухбайтовое сложение регистровых пар DE, BC
EB	8040		XCHG		DE< - >HL
7A	8041		MOV	A,D	
E6	8042		ANI	80h	Накладываем маску на старший байт и проверяем на знак (10000000)
80	8043				
37	8044		STC		Обнуляем флаг 
3F	8045		CMC		Переноса
7A	8046		MOV	A,D	
1F	8047		RAR		Сдвиг старшего байта вправо
57	8048		MOV	D,A	
7B	8049		MOV	A,E	
1F	804A		RAR		Сдвиг младшего байта вправо
5F	804B		MOV	E,A	
C2	804C		JNZ	M4	Если сумма отрицательна
52	804D				
80	804E				
C3	804F		JMP	M5	Если положительна, то М5
5E	8050				
80	8051				
7B	8052	M4:	MOV	A,E	Перевод в прямой код
2F	8053		CMA		Инверсия младшего байта
C6	8054		ADI	01h	Прибавляем единицу
01	8055				
5F	8056		MOV	E,A	
7A	8057		MOV	A,D	
2F	8058		CMA		Инверсия старшего байта
57	8059		MOV	D,A	
D2	805A		JNC	M5	Если переноса нет, то на М5
C6	805B		ADI	01h	Иначе прибавляем единицу к старшему байту
01	805C				
57	805D		MOV	D,A	
7B	805E	M5:	MOV	A,E	
D3	805F		OUT	03h	Вывод результат
03	8060				
7A	8061		MOV	A,D	
D3	8062		OUT	04h	Вывод результат
04	8063				
C3	8064		JMP	LOOP	Переход в начал
00	8065				
80	8066

Последний раз редактировалось Stilet; 05.02.2012 в 14:55.
left8 вне форума Ответить с цитированием
Старый 18.02.2013, 20:18   #2
Евгениий
Новичок
Джуниор
 
Регистрация: 18.02.2013
Сообщений: 1
По умолчанию

А у тебя есть электрическая схема под эту программу?
Евгениий вне форума Ответить с цитированием
Старый 19.02.2013, 07:17   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

для начала стоит указать под какой процессор этот ассемблер.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер и Cи upset Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 17 11.03.2021 13:43
Ассемблер SWEET_15 Помощь студентам 3 06.09.2016 08:45
Ассемблер ViSaDeR Помощь студентам 2 25.12.2010 20:37
Ассемблер flashpoint412 Помощь студентам 0 08.12.2010 10:10
Ассемблер Майкл18 Помощь студентам 0 27.11.2009 09:16