ddy-ddy / cs-408

计算机考研专业课程408相关的复习经验,资源和OneNote笔记
MIT License
4.63k stars 533 forks source link

请问:“无符号数:寄存器位数”是什么意思? #2

Closed scbzfarmingtest closed 2 years ago

scbzfarmingtest commented 2 years ago

计组第二章第一列无符号数 image 请问这里寄存器位数是指?比如8个寄存器,3位无符号数来指代(类似内存地址)?

ddy-ddy commented 2 years ago

计组第二章第一列无符号数

image

请问这里寄存器位数是指?比如8个寄存器,3位无符号数来指代(类似内存地址)?

这里应该指的是:寄存器的位数反映了无符号数的表示范围,如8位寄存器,其无符号数表示范围为0-256。 这个笔记做的比较简略,之后会考虑可读性加上一些解释说明。

ddy-ddy commented 2 years ago

计组第二章第一列无符号数

image

请问这里寄存器位数是指?比如8个寄存器,3位无符号数来指代(类似内存地址)?

一般可以用寄存器的位数来判断机器字长。比如一个32位地址寄存器MAR,那他可以表示的地址范围就是0-2^32-1,而这个范围就是32位无符号数表示的范围。

scbzfarmingtest commented 2 years ago

谢谢 抱歉再问一个。请问”寄存器的位数也叫机器字长“这句话是对的吗? 因为王道有这个题: image 尽管后面也有说: image 所以不选是因为不是定义尽管选项说法没错?还是并不完全对?比如16位机器是不是可以拥有32位寄存器?

scbzfarmingtest commented 2 years ago

抱歉没有自我判断能力,但是这有篇文章。内部寄存器、外设寄存器和内存的区别。 是不是应该说:”cpu内部的寄存器位数就是机器字长“,单说”寄存器“未必正确?

ddy-ddy commented 2 years ago

谢谢

抱歉再问一个。请问”寄存器的位数也叫机器字长“这句话是对的吗?

因为王道有这个题:

image

尽管后面也有说:

image

所以不选是因为不是定义尽管选项说法没错?还是并不完全对?比如16位机器是不是可以拥有32位寄存器?

不好意思,这句话我的表述有点问题。准确的说法应该是:“一般情况下可通过寄存器的位数判断机器字长”。机器字长就是计算机一次能处理的二进制数长度。 至于你说的“16位机器是否可以拥有32位寄存器”。按我的理解应该是不能的,就好比64位计算机可以用64位的操作系统,也可以用32位的操作系统。但是32位计算机只能用32位的os,不能用64位的os。不过我也不清楚我的说法是不是正确。

ddy-ddy commented 2 years ago

抱歉没有自我判断能力,但是这有篇文章。内部寄存器、外设寄存器和内存的区别

是不是应该说:”cpu内部的寄存器位数就是机器字长“,单说”寄存器“未必正确?

感觉可以这样理解。机器字长的大小决定了计算机寄存器最大有多大。比如机器字长32位,那寄存器最大就是32位的,但其实该计算机内部还有可能有8位的,16位的寄存器。 原博客的表述可能都默认最大寄存器的位数是机器字长。一般都不会计较这些吧。 其实你可以把这里说的寄存器当作“通用寄存器”。而通用寄存器的长度取决于机器字长。

ddy-ddy commented 2 years ago

抱歉没有自我判断能力,但是这有篇文章。内部寄存器、外设寄存器和内存的区别

是不是应该说:”cpu内部的寄存器位数就是机器字长“,单说”寄存器“未必正确?

可以参考下这篇博客 http://t.csdn.cn/VwtWs

scbzfarmingtest commented 2 years ago

好的谢谢!我又看了下,似乎关键在于整数运算通用寄存器一般等于机器字长。比如浮点数会更多。比如这里说x86有8个80位浮点寄存器。

ddy-ddy commented 2 years ago

好的谢谢!我又看了下,似乎关键在于整数运算通用寄存器一般等于机器字长。比如浮点数会更多。比如这里说x86有8个80位浮点寄存器。

对的,我觉得这个理解是透彻且正确的。👍

scbzfarmingtest commented 2 years ago

刚才看2020年好像考了机器字长,所以又详细查了下: 不同架构下,ALU可以属于寄存器,也可以不含寄存器(此时叫做虚拟寄存器) image ALU的输入是机器字长(也是内部数据总线的根数) image 除了通用寄存器和整数计算的寄存器(如果ALU是寄存器,显然包含在内),其他的位数一般都等于机器字长。见:寄存器的分类

主要的判定办法好像就是寄存器的作用。比如整数加减运算一定是一个周期完成的,而浮点数(对阶、求和、规格化、舍入、溢出判断)显然不是一个周期。指令寄存器、段寄存器,从指令系统可以知道也不一定是一个周期完成。指针和变址寄存器、标志寄存器等作用和数据总线不接边,而且甚至有些可以用通用寄存器(不一定是32位的E,X还是H),所以也不一定等于机器字长

ddy-ddy commented 2 years ago

刚才看2020年好像考了机器字长,所以又详细查了下:

不同架构下,ALU可以属于寄存器,也可以不含寄存器(此时叫做虚拟寄存器)

image

ALU的输入是机器字长(也是内部数据总线的根数)

image

除了通用寄存器和整数计算的寄存器(如果ALU是寄存器,显然包含在内),其他的位数一般都等于机器字长。见:寄存器的分类

主要的判定办法好像就是寄存器的作用。比如整数加减运算一定是一个周期完成的,而浮点数(对阶、求和、规格化、舍入、溢出判断)显然不是一个周期。指令寄存器、段寄存器,从指令系统可以知道也不一定是一个周期完成。指针和变址寄存器、标志寄存器等作用和数据总线不接边,而且甚至有些可以用通用寄存器(不一定是32位的E,X还是H),所以也不一定等于机器字长

说的很详细也易懂!感谢分享!