8位机器上int的大小

时间:2016-11-17 05:54:49

标签: c int sizeof 8-bit

ISO C标准规定A "plain" int object has the natural size suggested by the architecture of the execution environment

但是,也保证int至少与short一样大,至少为16位。

8位处理器(如6502或8080)建议的自然大小似乎是一个8位的int,但是这会使int短于16位。 那么,这些8位处理器中的一个有多大?

2 个答案:

答案 0 :(得分:3)

6502只有指令指针作为16位寄存器,16位整数用8位处理多个语句,例如如果你用16位c = a + b

clc                 ; clear carry bit
lda A_lo            ; lower byte of A into accumulator
adc B_lo            ; add lower byte of B to accumulator, put carry to carry bit
sta C_lo            ; store the result to lower byte of C
lda A_hi            ; higher byte of A into accumulator
adc B_hi            ; add higher byte of B using carry bit
sta C_hi            ; store the result to higher byte of C

8080和Z80 CPU当时也有1​​6位寄存器。

Z80 CPU仍然是8位架构。它的16位寄存器最终与两个8位寄存器配对,如BC,DE。使用它们的操作比使用8位寄存器要慢得多,因为CPU架构是8位,但这样就提供了16位寄存器和16个操作。

8088架构是混合的,因为它也有8位数据总线,但它有16位寄存器,AX,BX等,低位和高位字节也可单独作为8位寄存器,AL,AH等。< / p>

所以有不同的解决方案使用16位整数,但8位根本不是一个有用的整数。这就是为什么C和C ++也为int使用了16位。

答案 1 :(得分:2)

来自Section 6.2.5 Types, p5

  

5声明为signed signed类型的对象占用的存储量与&#39;&gt;&#39;&#39;&#39;&#39;&#39; char对象。一个普通的&#39;&#39;&#39; int对象具有执行环境体系结构建议的自然大小(大到足以包含标头<limits.h>中定义的INT_MIN到INT_MAX范围内的任何值)。

5.2.4.2.1 Sizes of integer types <limits.h> p1

  

它们的实现定义值的大小(绝对值)应与所示值相等或更大,且符号相同。

     

...

     
      
  • int类型对象的最小值

         

    INT_MIN -32767 // - (2 15 - 1)

  •   
  • int类型对象的最大值

         

    INT_MAX +32767 // 2 15 - 1

  •   

然后在这些平台中,int必须至少为16位