Важная информация

User Tag List

Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 26 из 26

Тема: TST (RO)+; CMP (R0)+,(R0)+

  1. #21
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,997
    Спасибо Благодарностей отдано 
    285
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    делаю так
    Насколько я себе представляю - на ВМ2 и ВМ3 будет сбиваться конвейер

  2. #22
    Activist Аватар для BlaireCas
    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    438
    Спасибо Благодарностей отдано 
    111
    Спасибо Благодарностей получено 
    322
    Поблагодарили
    125 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот еще вопрос кстати пришел на ум. В нашем ассемблере есть абсолютная и относительная адресации (кроме других). В зависимости от указаний ассемблеру он по-разному скомпилирует например такое:

    1) при директиве .ENABL AMA
    Код:
        clr VAR000 ; 005037  002000 (абс. адрес)
        ; эквивалентно clr @#VAR000
    2) без принуждения абсолютной адресации
    Код:
        clr VAR000 ; 005067  001420 (cмещение)
    И вот что-то я никогда обычно принудительно директиву абсолютной адресации не ставил. А тут задумался - оно ведь должно быстрее работать, или нет?
    (при абсолютном адресе процессору ведь не надо ничего складывать чтобы адрес получить... вроде)

  3. #23
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,579
    Спасибо Благодарностей отдано 
    1,233
    Спасибо Благодарностей получено 
    1,800
    Поблагодарили
    691 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    А тут задумался - оно ведь должно быстрее работать, или нет?
    Давай рассмотрим два твоих варианта основываясь на микрокоде ВМ2.

    @(PC)+ (абсолютный адрес переменной):
    1. Ожидаем готовности BRI (буферного регистра инструкции), чтобы в него загрузилось следующее слово
    2. АЛУ: Вычисляем адрес = BRI (4 такта) и запрашиваем цикл чтения шины
    3. Ожидаем готовности BRD (буферного регистра данных)
    4. АЛУ: Вычисляем CLR (4 такта) и запрашиваем цикл записи шины
    5. Переходим на команду выбора следующей некэшированной инструкции (т.к. мы адресовались по R7).

    X(PC) (относительный адрес переменной):
    1. Ожидаем готовности BRI (буферного регистра инструкции), чтобы в него загрузилось следующее слово
    2. АЛУ: Вычисляем адрес = BRI+PC (4 такта) и запрашиваем цикл чтения шины
    3, 4, 5 шаги такие же, как и в предыдущем варианте.

    Итого, по скорости абсолютно все равно, какой вариант.

    - - - Добавлено - - -

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    (при абсолютном адресе процессору ведь не надо ничего складывать чтобы адрес получить... вроде)
    АЛУ у ВМ2 очень гибкое, и легко вычисляет сложные исполнительные адреса одной операцией.

  4. Этот пользователь поблагодарил Titus за это полезное сообщение:

    BlaireCas (10.12.2020)

  5. #24
    Master
    Регистрация
    13.07.2018
    Адрес
    г. Переславль-Залесский
    Сообщений
    691
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    44
    Поблагодарили
    40 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Но это справедливо именно для 1801ВМ2... Благо его исследовали
    Для других процессоров могут быть сюрпризы ...

  6. #25
    Activist Аватар для BlaireCas
    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    438
    Спасибо Благодарностей отдано 
    111
    Спасибо Благодарностей получено 
    322
    Поблагодарили
    125 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    2. АЛУ: Вычисляем адрес = BRI (4 такта) и запрашиваем цикл чтения шины
    ...
    2. АЛУ: Вычисляем адрес = BRI+PC (4 такта) и запрашиваем цикл чтения шины
    ...
    АЛУ у ВМ2 очень гибкое, и легко вычисляет сложные исполнительные адреса одной операцией.
    Проверил на железке. Убедился что скомпилировались разные команды (005067 и 005037)
    Так и есть. Время абсолютно одинаково. (64.34сек на 10m операций clr memory с оверхедом на ~1m sob-ов, кст небыстро)

    Но... Но .. как, Холмс? (с)
    Ведь надо-же сначала сложить, а потом отправлять адрес на шину...

    Код:
            .MCALL .exit, .gtim, .ttyout, .gval
    
    .radix 10
    CONFIG = ^O300
    
    START:	; test 1
    	.gtim #area, #time
    	call	PAYLD1
    	call	PRIDIF
    	; clearing just in case
    	mov	#time, R0
    	mov	#6, R1
    	clr	(R0)+
    	sob	R1, .-2	
    	; test 2
    	.gtim #area, #time
    	call	PAYLD2
    	call	PRIDIF
    
    	.exit
    
    ; payload 1
    VAR000:	.WORD	0
    PAYLD1:	mov	#1000, R3
    5$:	mov	#1000, R2
    10$:	clr	VAR000
    	clr	VAR000
    	clr	VAR000
    	clr	VAR000
    	clr	VAR000
    	clr	VAR000
    	clr	VAR000
    	clr	VAR000
    	clr	VAR000
    	clr	VAR000
    	sob	R2, 10$
    	sob	R3, 5$
    	return
    	
    ; payload 2
    PAYLD2:	mov	#1000, R3
    5$:	mov	#1000, R2
    10$:	clr	@#VAR000
    	clr	@#VAR000
    	clr	@#VAR000
    	clr	@#VAR000
    	clr	@#VAR000
    	clr	@#VAR000
    	clr	@#VAR000
    	clr	@#VAR000
    	clr	@#VAR000
    	clr	@#VAR000
    	sob	R2, 10$
    	sob	R3, 5$
    	return
    
    ; print diff in sec
    PRIDIF:
    	mov	#time2, r1
    	.gtim	#area, r1
    	sub	@#time+2, @#time2+2
    	sbc	@#time2
    	sub	@#time, @#time2
    
    	mov	@#time2, r2
    	mov	@#time2+2, r3
    	asl	r3
    	rol	r2
    	.gval	#area, #CONFIG
    	mov	r0, r4
    	mov	r3, r1
    	mov	r2, r0
    	bit	#32, r4		;50 or 60 Hz?
    	bne	l206
    
    	asl	r1		;*5
    	rol	r0
    	add	@#time2+2, r1
    	adc	r0
    	add	@#time2, r0
    	asl	r1		; divisor is limited to 15 bits!
    	rol	r0
    	mov	r0, r3
    	clr	r2
    	div	#3, r2
    	mov	r3, r0
    	asr	r0
    	ror	r1
    	div	#3, r0
    	asr	r1
    	add	r0, r1
    	clr	r0
    	asr	r2
    	ror	r0
    	add	r0, r1
    	adc	r2
    	mov	r2, r0
    l206:	call	@#printsec	; prints r0:r1
    	mov	#10, r0
    	.ttyout
    	mov	#13, r0
    	.ttyout
    	return
    
    ; prints R0:R1/100
    printsec:  
    	mov	r1, r2
    	mov	r0, r1
    	clr	r4
    	mov	#1, r5 
    	mov	#34464, r3	;100000-65536
    	call	@#20$
    	clr	r5 
    	mov	#10000, r3
    	call	@#20$
    	mov	#1000, r3
    	call	@#20$
    	inc	r4
    	mov	#100, r3
    	call	@#20$
    	movb	#'., r0
    	.ttyout
    	mov	#10, r3
    	call	@#20$
    	mov	r2, r0
    2$:	add	#48, r0
    	.ttyout
    	inc	r4
    5$:	return
    7$:	tst	r4
    	bne	2$
    	tst	r0
    	beq	5$
    	inc	r4
    	br	2$
    20$:	mov	#65535, r0
    4$:	inc	r0
    	cmp	r1, r5
    	bcs	7$
    	bne	8$
    	cmp	r2, r3
    	bcs	7$
    8$:	sub	r3, r2
    	sbc	r1
    	sub	r5, r1
    	br	4$
    
    time:	.word 0, 0		; high, low!
    time2:	.word 0, 0
    area:	.word 0, 0
    
    .END	START
    (кст вывод секунд не мой, взят и теста числа ПИ на разных процессорах, вроде честно выдает)

  7. #26
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,579
    Спасибо Благодарностей отдано 
    1,233
    Спасибо Благодарностей получено 
    1,800
    Поблагодарили
    691 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Но... Но .. как, Холмс? (с)
    Ведь надо-же сначала сложить, а потом отправлять адрес на шину...
    Посмотри тему с описанием микрокоманд, и все станет понятно)
    Еще раз повторюсь, что АЛУ все равно, просто скопировать ссылку на адрес в регистр RA, или же еще заодно и сложить его с PC.

Страница 3 из 3 ПерваяПервая 123

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •