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

内存

此图是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,

相关推荐
Crossoads6 天前
【汇编语言】更灵活的定位内存地址的方法(三)—— 不同的寻址方式的灵活应用
android·开发语言·数据库·人工智能·机器学习·数据挖掘·汇编语言
Crossoads7 天前
【汇编语言】更灵活的定位内存地址的方法(二)—— 从 [bx+idata] 到 [bx+si+idata]:让你灵活的访问内存
android·java·服务器·网络协议·tcp/ip·机器学习·汇编语言
Crossoads12 天前
【汇编语言】[BX]和loop指令(四)—— 汇编语言中的段前缀与内存保护:原理与应用解析
android·java·开发语言·数据库·机器学习·汇编语言
CYRUS_STUDIO14 天前
Android下的系统调用 (syscall),内联汇编syscall
android·linux·汇编语言
我不是程序猿儿14 天前
【数据结构】汇编语言和机器语言的‘数据结构‘
开发语言·数据结构·汇编语言·机器语言
CYRUS_STUDIO15 天前
Android 下内联汇编,Android Studio 汇编开发
android·汇编语言
Crossoads1 个月前
【汇编语言】第一个程序(三)—— 深度剖析汇编程序的执行流程:编辑、编译、连接与运行
android·java·开发语言·数据库·网络协议·机器学习·汇编语言
xuan哈哈哈1 个月前
汇编语言
网络安全·汇编语言
Crossoads1 个月前
【汇编语言】第三章----寄存器(内存访问)(八)—— 栈顶越界的问题
java·开发语言·数据库·网络协议·tcp/ip·机器学习·汇编语言
Crossoads1 个月前
【汇编语言】寄存器(内存访问)(七)—— CPU提供的栈机制
android·java·tcp/ip·机器学习·cpu··汇编语言