User Tag List

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

Тема: Деление/умножение

  1. #11

    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    75
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    "Note: SLIA stands for semi-documented instruction Shift Left Inverted Arithmetic (operation codes 30h..37h prefixed by CBh, DDh CBh or EDh CBh) also known as SLL (Shift Left Logical). It shifts register to the left and sets the less significant bit to 1."

    Примечание: SLIA означает полудокументированную команду Сдвиг влево инвертированный арифметический (коды #30..#37 с приставками #CB, #DD #CB, #FD #CB) также известной как SLI(Сдвиг Влево Инвертированный). Она сдвигает регистр влево и устанавливает наименее значащий бит в 1.

    Две опечатки неточности: EDh <- #FD ; SLL <- SLI - прим. перев.

    Добавлено через 2 минуты
    По управлению портов, в том числе и по вашему вопросу с подробной иллюстрацией и комментом, отлично есть в "ZX Spectrum и TR-DOS для пользователей и программистов". Добрая душа сравнительно недавно передала его на вышеупомянутый сайт, в раздел литературы. Сам вот только полгода назад научился работать со страницами по первым главам этой книги, потому и рекламирую

    Добавлено через 7 минут
    Блин, там гдюк на гдюке.

    Ту процедуру с SLIA почитал... ну не может рез-т в D получиться. Надо как минимум jr nc, $+4 вместо $+3!

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

    Причем во многих процедурах, или я совсем уже отупел к полуночи, плз , проверьте меня...
    Последний раз редактировалось TomCaT; 28.09.2008 в 00:28. Причина: Добавлено сообщение
    Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
    Власть людей сильнее, чем люди у власти.
    Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)

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

    Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
    Мы все немного режем по дереву, а потом собираем корабли в бутылках.
    Is it the same old story you are going to tell me
    or is it the old story telling me and you we are the same?
    http://www.sky.od.ua/~ptsk
    [свернуть]


  2. #12

    Регистрация
    22.02.2005
    Адрес
    triebkraft
    Сообщений
    712
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    правильней будет не "наименее значащий бит" - а младший (нулевой)...

  3. #13

    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    75
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Точно, а то у меня какой-то дословный перевод...
    Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
    Власть людей сильнее, чем люди у власти.
    Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)

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

    Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
    Мы все немного режем по дереву, а потом собираем корабли в бутылках.
    Is it the same old story you are going to tell me
    or is it the old story telling me and you we are the same?
    http://www.sky.od.ua/~ptsk
    [свернуть]


  4. #14

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,402
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Искал алгоритм поразрядного деления, и случайно наткнулся на этот шедевр:

    Код:
    2.4 Classic 24-bit / 8-bit Unsigned
    
    Input: HLD = Dividend, E = Divisor, A = 0
    Output: HLD = Result, A = Remainder 
    	slia	d		; unroll 24 times
    	add	hl,hl		; ...
    	rla			; ...
    	sub	e		; ...
    	jr	nc,$+3		; ...
    	add	a,e		; ...
    	dec	d		; ...
    Может кто-то обьяснит, куда девалась проверка флага переноса после rla? Или я просто много хочу на ночь глядя? В процедуре деления, где делимое равно или меньше делителя, эта проверка не нужна, т.к. разрядность рабочего регистра остатка больше или равна числу сдвигов. В случае же, когда разрядность делителя меньше делимого, эта проверка требуется, иначе деление на число >= $80 приведет к глюку.

  5. #15

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Код:
    2.4 Classic 24-bit / 8-bit Unsigned
    
    Input: HLD = Dividend, E = Divisor, A = 0
    Output: HLD = Result, A = Remainder 
    	slia	d		; unroll 24 times
    	add	hl,hl		; ...
    	rla			; ...
    	sub	e		; ...
    	jr	nc,$+3		; ...
    	add	a,e		; ...
    	dec	d		; ...
    Может кто-то обьяснит, куда девалась проверка флага переноса после rla? Или я просто много хочу на ночь глядя? В процедуре деления, где делимое равно или меньше делителя, эта проверка не нужна, т.к. разрядность рабочего регистра остатка больше или равна числу сдвигов. В случае же, когда разрядность делителя меньше делимого, эта проверка требуется, иначе деление на число >= $80 приведет к глюку.
    В самом деле, возможен глюк при делении на число >$80 (не всегда). Значит ошибка в алгоритме. Надо же! А ведь я столько времени пользовался похожим алгоритмом, который тоже не проверяет перенос после сдвига рабочего регистра остатка.

    Когда делитель >$80, а в рабочем регистре остатка хранится число >=$80, но меньше делителя, то пробное вычитание окажется неуспешным, а на следующем проходе цикла рабочий регистр остатка будет сдвинут влево, т.е. там образуется число >=$100. Однако 8-разрядный аккумулятор не может хранить такое число, и старший разряд попадет во флаг C.

    В такой ситуации пробное вычитание должно обязательно быть успешным, т.к. $100>$FF (максимальное значение делителя). Однако поскольку старший разряд, находящийся во флаге C, данным алгоритмом не учитывается, то пробное вычитание снова окажется неуспешным. В результате в частное и в рабочий регистр остатка попадет неверная информация, делающая дальнейшую работу алгоритма ошибочной.

    Еще одна ошибка приведенного алгоритма - это то, что нужно применять ADC HL,HL, а не ADD HL,HL.

    ---

    Вот вариация без недокументированных команд и чуть быстрее (на одну команду в цикле):

    Код:
    2.4 Classic 24-bit / 8-bit Unsigned
    
    Input: HLD = Dividend, A = Divisor
    Output: HLD = Result, A = Remainder 
    	neg
    	ld	e,a
    	xor	a
    
    	rl	d		; unroll 24 times
    	adс	hl,hl		; ...
    	rla			; ...
    	add	a,e		; ...
    	jr	c,$+3		; ...
    	sub	e		; ...
    Последний раз редактировалось Barmaley_m; 27.11.2009 в 00:06. Причина: исправил тег

  6. #16

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,402
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    В самом деле, возможен глюк при делении на число >$80 (не всегда). Значит ошибка в алгоритме. Надо же! А ведь я столько времени пользовался похожим алгоритмом, который тоже не проверяет перенос после сдвига рабочего регистра остатка.

    Когда делитель >$80, а в рабочем регистре остатка хранится число >=$80, но меньше делителя, то пробное вычитание окажется неуспешным, а на следующем проходе цикла рабочий регистр остатка будет сдвинут влево, т.е. там образуется число >=$100. Однако 8-разрядный аккумулятор не может хранить такое число, и старший разряд попадет во флаг C.

    В такой ситуации пробное вычитание должно обязательно быть успешным, т.к. $100>$FF (максимальное значение делителя). Однако поскольку старший разряд, находящийся во флаге C, данным алгоритмом не учитывается, то пробное вычитание снова окажется неуспешным. В результате в частное и в рабочий регистр остатка попадет неверная информация, делающая дальнейшую работу алгоритма ошибочной.
    Совершенно верно. Что самое интересное, в приведенном документе все алгоритмы деления, у которых разрядность делителя меньше делимого, будет данный глюк. Возможно, автор взял за основу самый первый алгоритм, где делитель равнялся делимому, и на основе него настругал более разрядные, но не подумал, что может быть переполнение регистра остатка.

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

  8. #17

    Регистрация
    05.11.2007
    Адрес
    Одинцово
    Сообщений
    616
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пусть меня навсегда забанят из этого форума, но вы #$%^*@е извращенцы, все кто тут отписался... в _плохом_ смысле слова...

  9. #18

    Регистрация
    15.03.2009
    Адрес
    Киев
    Сообщений
    174
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Mat1sha, жжош

  10. #19

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,402
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Mat1sha Посмотреть сообщение
    Пусть меня навсегда забанят из этого форума, но вы #$%^*@е извращенцы, все кто тут отписался... в _плохом_ смысле слова...
    Это почему это извращенцы?

  11. #20

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,867
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    311
    Поблагодарили
    235 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Mat1sha, ты зачем в программирование лезешь?
    С уважением,
    Jerri / Red Triangle.

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

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

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

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

Похожие темы

  1. Быстрое умножение на 10000
    от litwr в разделе БК-0010/0011
    Ответов: 53
    Последнее: 11.12.2021, 03:54
  2. Ответов: 8
    Последнее: 19.10.2017, 15:08
  3. Процедуры на асме (умножение деления)
    от gres8 в разделе Программирование
    Ответов: 3
    Последнее: 25.01.2007, 10:26
  4. деление синхросигнала
    от Splinter в разделе Изображение
    Ответов: 3
    Последнее: 01.08.2005, 02:53

Ваши права

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