User Tag List

Страница 2 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 11 по 20 из 52

Тема: Extended Instructions Set (EIS): MUL, DIV, ASH, ASHC

  1. #11

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,393
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В делении аналогичный фрагмент с не вполне корректным изменением знака
    Код:
    			COM R4			; dividend was negative
    			NEG R3

  2. #12

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вы оба правы, внёс предложенные исправления.
    Заодно подумаю над фиксом MKDOS, чтобы вектор обработки команд расширенной арифметики всегда указывал на драйвер, а не сбрасывался системой постоянно.
    Какой всё же должен быть ответ и флаги при MUL #100000,R5 если в R5 число 77777 ?
    manwe.pdp-11.ru

  3. #13

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,393
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Результат умножения -32768dec*32767dec=-1073709056dec=30000100000oct=C0008000hex

  4. #14

    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    613
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    136 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Какой всё же должен быть ответ и флаги
    Ответ: в R5 число 100000, флаги: N и C

  5. #15

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кстати, команда ASH ведь работает с 16-битным числом, а сдвиг задаётся 6-ю битами. Значит, если сдвиг больше 15 или меньше -15, то мы сразу знаем ответ? При сдвиге влево это 0, а при сдвиге вправо это SXT от аргумента.
    manwe.pdp-11.ru

  6. #16

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,393
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Еще спорный момент с флагом C при умножении.
    "C: set if the result is less than -2^15 or greater than or equal to 2^15."
    Как я понимаю из этого описания, нужно установить флаг если результат <-2^15 или >=2^15, т.е. текущий вариант процедуры неправильно установит флаг, если результат =-2^15. Или я неправильно понял описание (или описание не совсем корректное). Для проверки можно, например, умножить #1 на #100000

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,393
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Само умножение можно немного ускорить и сократить

    Скрытый текст

    Код:
    		...
    		CLR R4
    		mov r2,r3
    		xor r5,r3			; result's sign
    		...
    		BPL 1
    			NEG R2
    1:		TST R5
    		BPL 2
    			NEG R5
    2:		...
    		CLR R1
    		CLR R0				; R0_R1 = R4_R5 * R2
    		br 31
    3:							; main loop
    		BCC 5
    			ADD R5,R1
    			ADC R0
    			ADD R4,R0
    5:		ASL R5
    		ROL R4
    31:		ROR R2
    		bne 3				; end of main loop
    		ADD R5,R1
    		ADC R0
    		ADD R4,R0
    7:		...
    72:		TST R3				; result's sign
    		bpl 0
    		...
    [свернуть]

  9. #18

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Само умножение можно немного ускорить и сократить
    Не проходит тест умножение -7 на 3 и 7 на -3 - ответ получается положительный, 21.
    Видимо, не надо было убирать INC R3 и DEC R3. Если их оставить, то тесты проходят.
    Впрыгнуть в конец цикла, чтобы избежать лишнего BR в цикле - хорошая идея, действительно ускоряет умножение в среднем на 26 тактов. Спасибо.

    Заодно ускорил ASH для сдвига вправо:
    Код:
    3:	BIS #177760,R5	; leave only 4 bits of negative value
    	ADD #20,R5		; 16
    	ASL R5			; offset
    	ADD R5,PC
    	.repeat 16.
    	{
    		ASR R4
    	}
    	CLV			; bit V should be 0 after right shift
    Последний раз редактировалось Manwe; 08.02.2020 в 11:47.
    manwe.pdp-11.ru

  10. #19

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,393
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Не проходит тест умножение -7 на 3 и 7 на -3 - ответ получается положительный, 21.
    Видимо, не надо было убирать INC R3 и DEC R3. Если их оставить, то тесты проходят.
    Вы что-то пропустили при модификации процедуры. Убрав inc r3 и dec r3 (и clr r3) я
    1. добавил mov r2,r3; xor r5,r3
    2. поменял BEQ 0 на bpl 0
    У меня -7*3=7*-3=-21, все нормально

  11. #20

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    добавил mov r2,r3; xor r5,r3
    А, вот это непонятно было - что и куда.
    Но в итоге по количеству команд то же самое получается? Или на одну короче?
    Трюк с R2 выглядит непонятным - значение этого регистра ещё не определено, но уже используется.
    manwe.pdp-11.ru

Страница 2 из 6 ПерваяПервая 123456 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 0
    Последнее: 29.08.2017, 14:06
  2. Sector II - Extended
    от Splinter в разделе Музыка
    Ответов: 7
    Последнее: 07.02.2014, 06:45
  3. EXTENDED MEMORY DETECTION
    от VELESOFT в разделе Память
    Ответов: 1
    Последнее: 04.04.2010, 22:50
  4. gfx extended :)
    от riskej в разделе Графика
    Ответов: 12
    Последнее: 06.08.2008, 17:58
  5. Fast 48x48 MUL | DIV
    от Sinus в разделе Программирование
    Ответов: 6
    Последнее: 05.07.2005, 17:00

Ваши права

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