1610

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

         全部学习汇总 GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

         前面对于汇编有了一个基本的了解这一章节主要是看一下汇编视角下的数据表达以及计算方式。

1. 整形会有有符号和无符号两种一般都是用最高位作为符号位。

2. 如果简单使用一个符号位和剩下的位组合成为一个有符号数0会有2种表达。0本来不应该有正负且只有一个数值。因此为了处理这样的问题会增加CPU逻辑的复杂度。

1. 上面的表达方式带来的另一个问题是正负数的相加需要转换成减法来处理这也会增加CPU逻辑的复杂度。

2. 另一种表达方式是采用补码处理的方式来进行相关的运算相比之前的一种方法在计算正负数的处理上有了改进但是依然存在正负0的问题。

3. 第二种补码方式我其实是熟悉的大学时候的教科书中的设计其实就是这个。这也是现代计算机中采用的方式补码加1。

1. 采用第二种补码的方式最大的改进点就是2种0的方式只剩下了一种。

2. 汇编语言或者说CPU处理的数据对象究竟是有符号的还是无符号的这个由指令决定。归根结底是由写代码的程序员来定。

         这一页讲到的size的扩展可以类比C语言中的数据类型转换来理解。

         如果size减少处理比较简单一般来说就是直接截断。如果是扩充相对来说就复杂一些。好的是CPU增加了一些这方面的指令简化了软件操作。从这一页的描述能看到有些处理所用的寄存器是固定的。

         这个问题之前的确是没有关注到为什么fgetc返回的会是int很重要的一点就是为了兼容EOF的判断。因此第二个程序可能会有误判的问题。

         如果字符类型是无符号的可能会导致死循环。如果字符是有符号的那么可能会提前中断。

         这一页介绍了一些算法的具体实现这部分信息不去仔细看了我觉得比较合适的方式还是在实战中品味理解。

         继续往后会是代码的调试与理解这部分我觉得单独分离出来整理更好一些。这次的小结暂且到此结束。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6