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

内存

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

相关推荐
Crossoads10 天前
【汇编语言】第一个程序(三)—— 深度剖析汇编程序的执行流程:编辑、编译、连接与运行
android·java·开发语言·数据库·网络协议·机器学习·汇编语言
xuan哈哈哈12 天前
汇编语言
网络安全·汇编语言
Crossoads15 天前
【汇编语言】第三章----寄存器(内存访问)(八)—— 栈顶越界的问题
java·开发语言·数据库·网络协议·tcp/ip·机器学习·汇编语言
Crossoads20 天前
【汇编语言】寄存器(内存访问)(七)—— CPU提供的栈机制
android·java·tcp/ip·机器学习·cpu··汇编语言
Crossoads21 天前
【汇编语言】寄存器(内存访问)(二)—— DS和[address]
android·java·tcp/ip·机器学习·汇编语言
Crossoads1 个月前
【汇编语言】寄存器(CPU工作原理)(六)—— 修改CS,IP的指令以及代码段
android·开发语言·网络协议·tcp/ip·机器学习·汇编语言
Crossoads1 个月前
【汇编语言】寄存器(CPU工作原理)(五)—— 段寄存器以及CS和IP
android·网络协议·tcp/ip·机器学习·汇编语言
tekin1 个月前
macos vscode+dosbox 8086汇编语言开发调试环境搭建方法 包含所有相关的工具的下载和安装配置方法
macos·dos·汇编语言·dosbox·tasm·汇编语言开发环境
安红豆.1 个月前
特殊的 BASE64 1
ctf·base64·汇编语言·逆向工程
2401_858286112 个月前
汇编实现从1加到1000(《X86汇编语言 从实模式到保护模式(第2版》) 第135页第2题解答)
汇编·nasm·汇编语言·x86·virtualbox·8086·virtual box