User Tag List

Страница 42 из 157 ПерваяПервая ... 383940414243444546 ... ПоследняяПоследняя
Показано с 411 по 420 из 1564

Тема: Программирование на УКНЦ как?

  1. #411

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Получается, что флаг V итоговой операции можно определять через флаг C, но для этого нужно повторить операцию, предварительно сместив биты операндов.

    А как нужно сместить операнды, чтобы "суммарный" бит C новой операции соответствовал суммарному биту V "оригинала" ?
    Думаю, что это очень накладно. Есть легче способы. Я предложил один из них.

  2. #412

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    смею предположить, что корректно будет брать флаги V с двух последних каскадов сложенные по xor.
    Т.е. C по OR, V по XOR, Z по AND и N по результату - выглядит красиво :)

  3. #413

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Т.е. C по OR, V по XOR, Z по AND и N по результату - выглядит красиво
    А в конце процедуры CCC и наполненный битами ноп-260
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

  4. #414

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В таком случае программа точной имитации 32-разрядного сложения может выглядеть так:

    MOV #<NOP>,SETPSW
    CLR Cflag
    CLR Vflag
    CLR Zflag
    ADD L1,L2
    BNE 1$
    BIS #4,Zflag
    1$:
    ADC H2
    BVC 2$
    BIS #2,Vflag
    2$:
    ADC Cflag
    ADD H1,H2
    BMI 3$
    BNE 4$
    BVC 5$
    BIS #2,SETPSW
    5$:
    BR DONE
    3$:
    BVC 6$
    BIS #2,SETPSW
    6$:
    BIS #10,SETPSW
    BR 7$
    4$:
    BVC 7$
    BIS #2,SETPSW
    7$:
    BIC #4,Zflag
    DONE:
    ADC SETPSW
    BIS Cflag,SETPSW
    ADD Vflag,SETPSW
    BIC #4,SETPSW
    BIS Zflag,SETPSW
    CCC
    SETPSW:
    NOP
    Последний раз редактировалось Patron; 06.12.2011 в 06:32.

  5. #415

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    В таком случае программа точной имитации 32-разрядного сложения может выглядеть так
    Лень думать, но как вариант: добавить к приемнику неявную 16битную старшую часть сверх значения и посмотреть что получится

    Обдумывать сил нет уже - спать хочу
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

  6. #416

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для проверки правильности работы программы имитации 32-разрядного сложения - добавил в эмулятор команду Add32, выполняющую прибавление 32-разрядного числа с адресом в R0 к 32-разрядному числу с адресом в R1:
    Код:
    if( nWord == 040 )
    { // Add_32_32  --  Add32 (R0),(R1)
    
    	word addr00 = R0 &(~1);
    	word addr02 = addr00 + 2;
    			
    	dword src = WORD(addr02);
    	src <<= 16;
    	src |= WORD(addr00);
    		    
    	word addr10 = R1 &(~1);
    	word addr12 = addr10 + 2;
    
    	dword dst = WORD(addr12);
    	dst <<= 16;
    	dst |= WORD(addr10);
    		    
    	word flags;
    		    
    	__asm {
    		mov  EAX, dst
    		add  EAX, src
    		pushf
    		mov  dst, EAX
    		pop  AX
    		mov  flags,AX
    	}
    
    	WORD(addr10) = (word)dst;
    	WORD(addr12) = (word)(dst>>16);
    		    
    	PSW &= ~(N|Z|V|C);
    		    
    	if( flags & BIT_0  ) { PSW |= C; }
    	if( flags & BIT_11 ) { PSW |= V; }
    	if( flags & BIT_6 )  { PSW |= Z; }
    	if( flags & BIT_7 )  { PSW |= N; }
    	    
    	continue;
    }
    В приложении - программа тестирования.

    Результат запуска:
    Код:
    .RU ADD32
    Add32 Test v1.0
     
    ******************************
     
    SRC: 0x0000'0000 (0)
    DST: 0x0000'0000 (0)
     
     Add32 : 0x0000'0000 (0)  ; PSW: 004 : N[0] Z[1] V[0] C[0]
    $Add32 : 0x0000'0000 (0)  ; PSW: 004 : N[0] Z[1] V[0] C[0]
     
    ******************************
     
    SRC: 0x0000'0001 (1)
    DST: 0x0000'0000 (0)
     
     Add32 : 0x0000'0001 (1)  ; PSW: 000 : N[0] Z[0] V[0] C[0]
    $Add32 : 0x0000'0001 (1)  ; PSW: 000 : N[0] Z[0] V[0] C[0]
     
    ******************************
     
    SRC: 0x0000'0001 (1)
    DST: 0x0000'0001 (1)
     
     Add32 : 0x0000'0002 (2)  ; PSW: 000 : N[0] Z[0] V[0] C[0]
    $Add32 : 0x0000'0002 (2)  ; PSW: 000 : N[0] Z[0] V[0] C[0]
     
    ******************************
     
    SRC: 0x0000'0001 (1)
    DST: 0xFFFF'FFFF (-1)
     
     Add32 : 0x0000'0000 (0)  ; PSW: 005 : N[0] Z[1] V[0] C[1]
    $Add32 : 0x0000'0000 (0)  ; PSW: 005 : N[0] Z[1] V[0] C[1]
     
    ******************************
     
    SRC: 0x0000'0002 (2)
    DST: 0xFFFF'FFFF (-1)
     
     Add32 : 0x0000'0001 (1)  ; PSW: 001 : N[0] Z[0] V[0] C[1]
    $Add32 : 0x0000'0001 (1)  ; PSW: 001 : N[0] Z[0] V[0] C[1]
     
    ******************************
     
    SRC: 0xFFFF'FFFF (-1)
    DST: 0x0000'0001 (1)
     
     Add32 : 0x0000'0000 (0)  ; PSW: 005 : N[0] Z[1] V[0] C[1]
    $Add32 : 0x0000'0000 (0)  ; PSW: 005 : N[0] Z[1] V[0] C[1]
     
    ******************************
     
    SRC: 0xFFFF'FFFF (-1)
    DST: 0xFFFF'FFFF (-1)
     
     Add32 : 0xFFFF'FFFE (-2)  ; PSW: 011 : N[1] Z[0] V[0] C[1]
    $Add32 : 0xFFFF'FFFE (-2)  ; PSW: 011 : N[1] Z[0] V[0] C[1]
     
    ******************************
     
    SRC: 0x7FFF'FFFF (2'147'483'647)
    DST: 0x8001'0001 (-2'147'418'111)
     
     Add32 : 0x0001'0000 (65'536)  ; PSW: 001 : N[0] Z[0] V[0] C[1]
    $Add32 : 0x0001'0000 (65'536)  ; PSW: 001 : N[0] Z[0] V[0] C[1]
     
    ******************************
     
    SRC: 0x8001'0001 (-2'147'418'111)
    DST: 0x7FFF'FFFF (2'147'483'647)
     
     Add32 : 0x0001'0000 (65'536)  ; PSW: 001 : N[0] Z[0] V[0] C[1]
    $Add32 : 0x0001'0000 (65'536)  ; PSW: 001 : N[0] Z[0] V[0] C[1]
     
    ******************************
     
    SRC: 0x0000'0001 (1)
    DST: 0x7FFF'FFFE (2'147'483'646)
     
     Add32 : 0x7FFF'FFFF (2'147'483'647)  ; PSW: 000 : N[0] Z[0] V[0] C[0]
    $Add32 : 0x7FFF'FFFF (2'147'483'647)  ; PSW: 000 : N[0] Z[0] V[0] C[0]
     
    ******************************
     
    SRC: 0x0000'0001 (1)
    DST: 0x7FFF'FFFF (2'147'483'647)
     
     Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 012 : N[1] Z[0] V[1] C[0]
    $Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 012 : N[1] Z[0] V[1] C[0]
     
    ******************************
     
    SRC: 0xFFFF'FFFF (-1)
    DST: 0x8000'0001 (-2'147'483'647)
     
     Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 011 : N[1] Z[0] V[0] C[1]
    $Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 011 : N[1] Z[0] V[0] C[1]
     
    ******************************
     
    SRC: 0xFFFF'FFFF (-1)
    DST: 0x8000'0000 (-2'147'483'648)
     
     Add32 : 0x7FFF'FFFF (2'147'483'647)  ; PSW: 003 : N[0] Z[0] V[1] C[1]
    $Add32 : 0x7FFF'FFFF (2'147'483'647)  ; PSW: 003 : N[0] Z[0] V[1] C[1]
     
    ******************************
    Вроде, всё правильно.

    Есть ещё какие-то граничные случаи, которые нужно протестировать дополнительно ?
    Вложения Вложения
    • Тип файла: zip ADD32.ZIP (2.0 Кб, Просмотров: 126)
    Последний раз редактировалось Patron; 08.12.2011 в 19:21.

  7. #417

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Есть ещё какие-то граничные случаи, которые нужно протестировать дополнительно ?
    Для проверки просто перебирают все комбинации, и все)

  8. #418

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Для проверки просто перебирают все комбинации, и все)
    Я не очень силён в арифметике, но 2**32**32 циклов эмуляции полного выполнения подпрограммы тестирования могут (как мне кажется ) занять больше времени, чем хотелось бы :)

  9. #419

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Я не очень силён в арифметике, но 2**32**32 циклов эмуляции полного выполнения подпрограммы тестирования могут (как мне кажется ) занять больше времени, чем хотелось бы
    Да)
    Поэтому как вариант, выкидывать перебор бит в диапазоне, допустим, 3..29 бита, таким образом числа редуцируются до 5-6 бит)

  10. #420

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Проверил ещё немного входных данных:
    Код:
    	.W3232	0000 8000	7fff 8000
    	.W3232	0002 0000	7ffe 0000
    	.W3232	0001 0000	7ffe 0000
    	.W3232	0001 8000	7ffe 8000
    	.W3232	7fff 0000	7fff 0000
    	.W3232	8000 0000	7fff 0000
    	.W3232	8001 0001	7fff ffff
    	.W3232	7fff ffff	8001 0001
    	.W3232	8000 0000	8000 0000
    	.W3232	ffff 0000	8000 0000
    	.W3232	ffff 8000	8000 8000
    Ошибок нет:

    Код:
    .RU ADD32
    Add32 Test v1.1
     
    ******************************
     
    SRC: 0x0000'8000 (32'768)
    DST: 0x7FFF'8000 (2'147'450'880)
     
     Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 012 : N[1] Z[0] V[1] C[0]
    $Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 012 : N[1] Z[0] V[1] C[0]
     
    ******************************
     
    SRC: 0x0002'0000 (131'072)
    DST: 0x7FFE'0000 (2'147'352'576)
     
     Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 012 : N[1] Z[0] V[1] C[0]
    $Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 012 : N[1] Z[0] V[1] C[0]
     
    ******************************
     
    SRC: 0x0001'0000 (65'536)
    DST: 0x7FFE'0000 (2'147'352'576)
     
     Add32 : 0x7FFF'0000 (2'147'418'112)  ; PSW: 000 : N[0] Z[0] V[0] C[0]
    $Add32 : 0x7FFF'0000 (2'147'418'112)  ; PSW: 000 : N[0] Z[0] V[0] C[0]
     
    ******************************
     
    SRC: 0x0001'8000 (98'304)
    DST: 0x7FFE'8000 (2'147'385'344)
     
     Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 012 : N[1] Z[0] V[1] C[0]
    $Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 012 : N[1] Z[0] V[1] C[0]
     
    ******************************
     
    SRC: 0x7FFF'0000 (2'147'418'112)
    DST: 0x7FFF'0000 (2'147'418'112)
     
     Add32 : 0xFFFE'0000 (-131'072)  ; PSW: 012 : N[1] Z[0] V[1] C[0]
    $Add32 : 0xFFFE'0000 (-131'072)  ; PSW: 012 : N[1] Z[0] V[1] C[0]
     
    ******************************
     
    SRC: 0x8000'0000 (-2'147'483'648)
    DST: 0x7FFF'0000 (2'147'418'112)
     
     Add32 : 0xFFFF'0000 (-65'536)  ; PSW: 010 : N[1] Z[0] V[0] C[0]
    $Add32 : 0xFFFF'0000 (-65'536)  ; PSW: 010 : N[1] Z[0] V[0] C[0]
     
    ******************************
     
    SRC: 0x8001'0001 (-2'147'418'111)
    DST: 0x7FFF'FFFF (2'147'483'647)
     
     Add32 : 0x0001'0000 (65'536)  ; PSW: 001 : N[0] Z[0] V[0] C[1]
    $Add32 : 0x0001'0000 (65'536)  ; PSW: 001 : N[0] Z[0] V[0] C[1]
     
    ******************************
     
    SRC: 0x7FFF'FFFF (2'147'483'647)
    DST: 0x8001'0001 (-2'147'418'111)
     
     Add32 : 0x0001'0000 (65'536)  ; PSW: 001 : N[0] Z[0] V[0] C[1]
    $Add32 : 0x0001'0000 (65'536)  ; PSW: 001 : N[0] Z[0] V[0] C[1]
     
    ******************************
     
    SRC: 0x8000'0000 (-2'147'483'648)
    DST: 0x8000'0000 (-2'147'483'648)
     
     Add32 : 0x0000'0000 (0)  ; PSW: 007 : N[0] Z[1] V[1] C[1]
    $Add32 : 0x0000'0000 (0)  ; PSW: 007 : N[0] Z[1] V[1] C[1]
     
    ******************************
     
    SRC: 0xFFFF'0000 (-65'536)
    DST: 0x8000'0000 (-2'147'483'648)
     
     Add32 : 0x7FFF'0000 (2'147'418'112)  ; PSW: 003 : N[0] Z[0] V[1] C[1]
    $Add32 : 0x7FFF'0000 (2'147'418'112)  ; PSW: 003 : N[0] Z[0] V[1] C[1]
     
    ******************************
     
    SRC: 0xFFFF'8000 (-32'768)
    DST: 0x8000'8000 (-2'147'450'880)
     
     Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 011 : N[1] Z[0] V[0] C[1]
    $Add32 : 0x8000'0000 (-2'147'483'648)  ; PSW: 011 : N[1] Z[0] V[0] C[1]
     
    ******************************
    Вложения Вложения
    • Тип файла: zip ADD32.ZIP (2.2 Кб, Просмотров: 148)

Страница 42 из 157 ПерваяПервая ... 383940414243444546 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Программирование на Эмуляторе. Возможно ли это?
    от Toxic в разделе Программирование
    Ответов: 10
    Последнее: 20.01.2008, 19:20
  2. Программирование Altera и JTAG
    от Mikka_A в разделе Несортированное железо
    Ответов: 7
    Последнее: 18.01.2008, 09:07
  3. Программирование и софтмейк на NES
    от Splinter в разделе Nintendo
    Ответов: 7
    Последнее: 30.06.2006, 04:31

Ваши права

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