nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 16 Oct 2018 12:09



Reply to topic  [ 33 posts ]  Go to page Previous  1, 2, 3
Табличные N-ричные сумматоры на Бэйсике 
Author Message
Senior

Joined: 08 Mar 2018 00:17
Posts: 175
Location: Россия, Москва
Reply with quote
Табличный шестнадцатиричный полный (трёхаргументный, трёхоперандный, трёхвходовой) последовательный
16-ти гексадецитный (16-ти разрядный) сумматор


Так как в разряде переноса не бывает значения больше 1, то таблица истинности имеет 16*16*2=512 колонок,
которые из-за большой величины здесь не приводятся, но гексадециты суммы по модулю 16 и переноса
выводятся на экран и приведены на скриншоте результата выполнения нижеприведённой программы
на Turbo Basic'е:
Code:
CLS
COLOR 10,0

'adder initialisation
DIM HexaDecimal$(15),HDTD$(15),HDTD%(15)
DATA "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"
FOR I%=0 TO 15
  READ HexaDecimal$(I%)
NEXT I%

DIM F3HDS%(15,15,1),F3HDC%(15,15,1)

FOR K%=0 TO 1
  FOR J%=0 TO 15
    FOR I%=0 TO 15
      F3HDS%(I%,J%,K%)=(I%+J%+K%) MOD 16
      F3HDC%(I%,J%,K%)=(I%+J%+K%) \ 16
      PRINT HexaDecimal$(F3HDS%(I%,J%,K%));
    NEXT I%
  NEXT J%
NEXT K%
PRINT
FOR K%=0 TO 1
  FOR J%=0 TO 15
    FOR I%=0 TO 15
      F3HDC%(I%,J%,K%)=(I%+J%+K%) \ 16
      PRINT HexaDecimal$(F3HDC%(I%,J%,K%));
    NEXT I%
  NEXT J%
NEXT K%
PRINT
PRINT

'input numbers
A$="000F00F00F00F00F"
B$="000B00C00D00E00F"
C%=0
PRINT A$
PRINT B$
PRINT "----------------"

DIM A$(15),B$(15),A%(15),B%(15),S%(15)
FOR I%=0 TO 15
  A$(I%)=MID$(A$,16-I%,1)
  IF ASC(A$(I%))<58 THEN A%(I%)=VAL(A$(I%)) ELSE A%(I%)=ASC(A$(I%))-&H37
  B$(I%)=MID$(B$,16-I%,1)
  IF ASC(B$(I%))<58 THEN B%(I%)=VAL(B$(I%)) ELSE B%(I%)=ASC(B$(I%))-&H37
NEXT I%

MTIMER
'adding
FOR I%=0 TO 15
  S%(I%)=F3HDS%(A%(I%),B%(I%),C%)
  C%    =F3HDC%(A%(I%),B%(I%),C%)
NEXT I%
ElapsedTime=MTIMER

FOR I%=15 TO 0 STEP -1
  PRINT HexaDecimal$(S%(I%));
NEXT I%
PRINT
PRINT
PRINT "It took";ElapsedTime;"microseconds"
END

Скриншот результатов выполнения программы:
Attachment:
HexaDecimalAdder.JPG
HexaDecimalAdder.JPG [ 82.52 KiB | Viewed 58 times ]

По времени выполнения сложения (88 микросекунд) видно, что при последовательном сложении на программных табличных сумматорах
время сложения почти не зависит от основания системы счисления и от количества переносов
.
Из этого следует, что при последовательном сложении на программных табличных сумматорах, чем больше основание системы счисления, тем больше мощность сумматора.


13 Oct 2018 01:48
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
AndrejKulikov wrote:
По времени выполнения сложения (88 микросекунд) видно, что при последовательном сложении на программных табличных сумматорах
время сложения почти не зависит от основания системы счисления и от количества переносов
.
Из этого следует, что при последовательном сложении на программных табличных сумматорах, чем больше основание системы счисления, тем больше мощность сумматора.

Я всё же ещё раз задам простой вопрос, на который никак не могу получит от топикстартера ответа:
"На какой тактовой частоте микропроцессора время выполнения сложения на программных табличных сумматорах составляет 88 микросекунд?"

Складывается впечатление, что 88 микросекунд - это время, за которое TB выполняет приводимую выше программу, именно поэтому программный поиск по таблицам и занимает примерно одинаковое время и "почти не зависит от основания системы счисления и от количества переносов".

_________________
iLavr


13 Oct 2018 03:46
Profile
Senior

Joined: 08 Mar 2018 00:17
Posts: 175
Location: Россия, Москва
Reply with quote
Дальнейшее увеличение мощности табличного сумматора
При основании системы счисления равной 65536 (16 битов, 2 байта) размер массива только с суммами по
модулю 65536 займёт
(2^16)*(2^16)*2=65536*65536*2 = 8 589 934 592 двубайтов, что при объёмах памяти современных
ПК не приемлемо.
При основании системы счисления равной 19683 (9 тритов, 1 девятитрит) размер массива только с суммами по
модулю 19683 займёт
(3^9)*(3^9)*2 = 774 840 978 девятитритов, что при объёмах памяти современных ПК также
не приемлемо.
При основании системы счисления равной 256 (8 битов, 1 байт) размер массива только с суммами по
модулю 256 займёт
(2^8)*(2^8)*2 = 256*256*2 = 131 072 байта, что приемлемо для объёмов памяти современных ПК,
но не на Turbo Basic'е с максимальным объёмом массивов 64 килобайта.


13 Oct 2018 04:36
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 33 posts ]  Go to page Previous  1, 2, 3

Who is online

Users browsing this forum: No registered users and 6 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.