承上启下

承上启下

我们可以在一段内存中存放数据         数据段                 存放了我们自己定义的数据

我们还可以在一段内存中存放指令                     指令段(代码段)             存放了我们自己定义的指令

 我们可以将一段内存定义成栈空间        因为我们处理数据的时候需要临时性存放        栈段

 

我们如何让CPU按照我们的安排去访问这些内存段呢?

对于数据段来说,段地址给ds段地址寄存器       偏移地址[1], [2].....mov  add sub 指令去访问  这些内存单元

那么CPU就会将我们定义的数据段中的内容当做数据来访问

 

对于代码段来说,我们可以通过修改CS  IP这两个寄存器  去指向我们定义的代码段

这样CPU就将执行我们定义的代码段中的指令

这样CPU就执行了我们定义代码段中的指令

 

对于栈段来说  ,我们可以通过修改SS,  SP这两个寄存器 去决定栈顶标记在哪里

这样CPU在执行栈的操作时  比如push  pop 就会将我们定义的栈段当做栈空间使用  进行临时性存放或者取出

 

不管我们如何安排, CPU将内存中某段内容当做指令,是因为cs,ip指向那里

CPU将某段内存当做栈空间  是因为ss,sp指向那里

 

我们一定要清楚,我们是如何安排内存的。以及如何让CPU按照我们的安排去行事

数据从哪里来

指令从哪里来

临时性数据存放到哪里去

 

取决于 我们对CPU中的地址寄存器的设置    cs  ip ss  ds  sp 寄存器

 

 内存段的安全       数据段  代码段  栈段

随意的项某一段内存空间中写入内容是非常危险的

 

mov指令  由于我们不小心修改了系统存放在内存中的重要数据或者指令导致的程序崩溃  系统的崩溃

 

向安全的内存空间去写入内容

0:200~0:2FFH

256个字节

使用操作系统分配给你的内存空间

在操作系统的环境中,合法的通过操作系统取得的内存空间都是合法的

因为操作系统不会让一个程序所使用的内存空间和其他程序以及系统自己的空间产生冲突

现在可以把操作系统看做一个管理内存的程序

操作系统就是干管理内存事情的

使用所以在操作系统允许的情况下 程序可以取得任意容量的内存空间

 

一种是系统加载程序使为程序分配的内存空间

程序在执行的过程中 向系统再去申请内存

 

 

如何在系统上运行的   如何运行软件的——》系统去运行一个exe文件(程序) ——》为程序分配内存

ctrl+alt+del——》启动任务管理器

 

 

 编译和链接  得到一个exe文件

源文件    安排自己的代码段  数据段  栈段    通过编译和链接   得到一个exe文件

 

如何从系统申请内存

exe

源文件进行编译和链接就可以得到exe文件

代码段  数据段  栈段都是写在源文件中的

 

 

伪指令:告诉编译器  也就是翻译软件  这里怎么翻译 那里怎么翻译

data  segment 数据段

stack  segment  栈段

code  segment  代码段

 

对CPU的地址寄存器进行了设置  从而让CPU按照我们的安排去访问数据段和栈段

至于代码段  如果关于CS和IP的设置

 

posted @ 2020-10-19 16:58  Arthur_hsp  阅读(100)  评论(0编辑  收藏  举报