Как 32-битное слово будет храниться в 16-битной архитектуре, которая не обнаруживает переполнение? - PullRequest
0 голосов
/ 29 марта 2019

Как 32-разрядное числовое кодовое слово будет храниться в гипотетической 16-разрядной архитектуре, если эта система не может обнаружить переполнение?

Как оно будет храниться в реальной 68HC11 системе?

Что меня смущает, так это то, что в системе, которая не обнаруживает переполнение, я не уверен, возможно ли вообще сохранить значение больше 16 бит?

Ответы [ 2 ]

3 голосов
/ 30 марта 2019

как 32-разрядное числовое кодовое слово будет сохранено в 16-разрядной архитектуре ...

Просто сохранение информации делаетне требует каких-либо функций ЦП.

Для хранения N бит данных требуется N / 8 байт памяти.

Этопрограммное обеспечение (а не аппаратное обеспечение), которое должно «знать», содержат ли четыре байта одно 32-разрядное слово, 32-разрядное значение с плавающей запятой, два 16-разрядных слова, 4 8-разрядных слова или 32 одиночных бита.

Если вы пишете программу на ассемблере, вы должны написать программу соответственно.Если вы используете какой-либо язык программирования, компилятор должен сделать это.

... если эта система не может обнаружить переполнение ?

Вычисление (особенно добавляя) это другое дело.Если вы ссылаетесь на «флаг переноса» словом «переполнение»:

Вы можете вручную проверить перенос: если вы добавите два числа, и будет выполнено выполнение, сумма будет меньше, чем каждый издва слагаемых.Если перенос отсутствует, сумма будет больше или равна каждому слагаемому.

При выполнении 64-разрядного сложения на процессоре MIPS (32-разрядный процессор не , поддерживающийфлажок) с помощью компилятора GCC эта проверка будет выполнена.Вот псевдокод:

sum_low  = a_low + b_low
  // The CPU does not support carry:
sum_high = a_high + b_high
  // Simulate carry:
if(a_low > sum_low) sum_high = sum_high + 1

Как он будет храниться в системе 6811?

Насколько я знаю, 6811 использует хранилище с прямым порядком байтов.Это означает, что сам ЦП хранит 16-битные слова (например, программный счетчик) таким образом, что старшие 8 бит хранятся по адресу N , а младшие 8 бит хранятся по адресу N+ 1 .

По этой причине большинство компиляторов также хранят 32-битное слово "big endian": старшие 8 бит хранятся по адресу N и младшие 8биты хранятся по адресу N + 3 .

. 6811 определенно поддерживает «флаг переноса», добавляя с переносом и «флаг переполнения».Таким образом, 6811 не является примером процессора, "не обнаружившего переполнение".См. old_timer ответ о том, как добавление работает на процессорах с переполнением и переносом.

3 голосов
/ 29 марта 2019

Одна вещь не имеет ничего общего с другой, 32-битные и 16-битные x86-процессоры могли обрабатывать 64-битные переменные задолго до появления 64-битных процессоров. 8-битные процессоры могут обрабатывать миллионные битовые переменные, если для их хранения достаточно памяти.

int fun0 ( void )
{
    return(sizeof(unsigned long long));
}

unsigned long long fun ( unsigned long long a, unsigned long long b )
{
    return(a+b);
}

скомпилировано для 16-битной цели:

00000000 <fun0>:
   0:   3f 42           mov #8, r15 ;r2 As==11
   2:   30 41           ret         

00000004 <fun>:
   4:   1c 51 02 00     add 2(r1),  r12 ;0x0002(r1)
   8:   1d 61 04 00     addc    4(r1),  r13 ;0x0004(r1)
   c:   1e 61 06 00     addc    6(r1),  r14 ;0x0006(r1)
  10:   1f 61 08 00     addc    8(r1),  r15 ;0x0008(r1)
  14:   30 41           ret 

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

В начальной школе мы научились справляться с этим

 99
+ 5
====

мы имели дело с этой одной цифрой за раз, наша математика, выполненная вручную, имеет ширину в одну цифру, но мы можем обрабатывать бесконечно большие числа, пока у нас достаточно бумаги.

мы сделали эту однозначную математику

  9
+ 5
====
 14

, что 4 несут 1

Затем мы выполнили однозначную математику

  1
  9
+ 0
======
 10

, что 0 несет 1

Итак, мы сделали одну цифру

  1
  0
+ 0
====
  1

наконец получаю результат 99 + 5 = 104

Нет разницы, когда использовать компьютер, отличный от базы 2, проще, чем база 10.

...