对汇编内存和进制的基本了解

内存

此图是8086CPU的内存空间:8086CPU的地址总线宽度为20,可以定位到2^20个不同的内存单元(内存地址的范围是0x00000-0xFFFFFF),所以8086的内存空间大小为1M。

  • 0x00000-0x9FFFF:主存储器,可读可写
  • 0xA0000-0xB0000:向内存中写入数据,这些数据会被显卡输出到显示器,可读可写
  • 0xC0000-0xFFFFF:存储器中各种硬件/系统信息,只读。

这个作为早期的内存结构,现在的内存是访问不到系统信息的,因为做了虚拟地址的隔离

学习进制的障碍

进制学习的主要障碍是我们的教育目前都是以十进制来传递给我们的,学习使用了很多年,已经深入骨髓,在学习其他进制的时候,总是要以十进制为依托,先入为主,器思考,这种方式本质上就是错误的。现在程序员接触到的二进制、八进制、十六进制,每一种进制都是完美的。都有各自的计算规则。不需要按十进制来思考!不需要按十进制来思考!不需要按十进制来思考!重要的事情讲三遍。

进制的定义

  • 二进制由2个符号组成:0、1逢二进一
  • 八进制由8个符号组成:0、1、2、3、4、5、6、7逢八进一
  • 十进制由10个符号组成:0、1、2、3、4、5、6、7、8、9逢十进一
  • 十六进制由16个符号组成:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F逢16进一

其实我们国家古代的人是非常智慧的,十六进制使用的是非常早的,"半斤八两"讲的就是十六进制。一斤是16两

进制的运算

八进制加法表

ini 复制代码
 0   1   2   3   4   5   6   7
10  11  12  13  14  15  16  17
20  21  22  23  24  25  26  27
. . .

1+1 = 2
1+2 = 3  2+2 = 4
1+3 = 4  2+3 = 5   3+3 = 6
1+4 = 5  2+4 = 6   3+4 = 7   4+4 = 10
1+5 = 6  2+5 = 7   3+5 = 10  4+5 = 11  5+5 = 12
1+6 = 7  2+6 = 10  3+6 = 11  4+6 = 12  5+6 = 13  6+6 = 14
1+7 = 8  2+7 = 11  3+7 = 12  4+7 = 13  5+7 = 14  6+7 = 15  7+7 = 16
. . .

八进制乘法表

ini 复制代码
 0   1   2   3   4   5   6   7
10  11  12  13  14  15  16  17
20  21  22  23  24  25  26  27
. . .

1*1 = 1
1*2 = 2  2*2 = 4
1*3 = 3  2*3 = 6 3*3 = 11
1*4 = 4  2*4 = 10 3*4 = 14  4*4 = 20
1*5 = 5  2*5 = 12  3*5 = 17  4*5 = 24  5*5 = 31
1*6 = 6  2*6 = 14  3*6  = 22  4*6 = 30  5*6 = 36  6*6 = 44
1*7 = 7  2*7 = 16  3*7 = 25  4*7 = 34  5*7 = 43  6*7 = 52  7*7 = 61
. . .   

二进制:从0写到1111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1111 十六进制: 0 1 2 3 4 5 6 7 8 9 A B C D E F

数据宽度

数学上的数字,是没有大小限制的,可以无限大,但是在计算机中,由于受硬件的制约,数据都是有长度限制的(成为数据宽度),超过最大数据宽度的数据会被丢弃

objectivec 复制代码
#import <UIKit/UIKit.h>
#import "AppDelegate.h"


int test() {
    int cTemp = 0x1FFFFFFFF;
    return cTemp;
}

int main(int argc, char * argv[]) {
    NSString * appDelegateClassName;
    
    printf("cTemp:%x\n",test());
    
    @autoreleasepool {
        // Setup code that might create autoreleased objects goes here.
        appDelegateClassName = NSStringFromClass([AppDelegate class]);
    }
    return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}

会有一个警告

Implicit conversion from 'long' to 'int' changes value from 8589934591 to -1,cTemp的值为-1

###计算机中常见的数据宽度

  • 位(Bit):1个位就是1个二进制位(0或者1)
  • 字节(Byte):1个字节由8个Bit组成(8位),内存中最小的单元式Byte
  • 字(Word): 1个字由2个字节组成(16位),这2个字节分别成为高字节和低字节
  • 双字(DoubleWrod): 1个双字由2个字组成(32位)

计算机储存数据会分为有符号和无符号数,无符号数,直接运算。有符号数:正数:0 - 7,负数:-8 - F,

相关推荐
2401_8582861116 小时前
汇编实现从1加到1000(《X86汇编语言 从实模式到保护模式(第2版》) 第135页第2题解答)
汇编·nasm·汇编语言·x86·virtualbox·8086·virtual box
Terasic友晶科技6 天前
第47篇 汇编语言实现中断<三>
汇编语言·中断
黄卷青灯7711 天前
汇编语言知识基础介绍
开发语言·汇编语言
codists1 个月前
《Programming from the Ground Up》阅读笔记:p103-p116
编程人·汇编语言
Kryo3 个月前
人人都能成为汇编高手 —— Android ARM64调试 从入门到入土
android·汇编语言
喜豆老爹3 个月前
CPU内部结构窥探·「2」
arm·汇编语言
qq_459730035 个月前
汇编语言(详解)
汇编语言
kaixin_啊啊5 个月前
汇编语言知识点整理(应付考试专用,想学习找其他的)
学习·汇编语言
阿姆姆姆姆姆姆姆5 个月前
计算机基础系列 —— 汇编器
操作系统·cpu·汇编语言
大熊猫侯佩6 个月前
Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(一)
swift·汇编语言·hook·钩子·nsobject·objc·方法调用链