首页
社区
课程
招聘
寂寞的高手,看下这2段汇编程序有什么区别?
发表于: 2010-11-8 14:52 5454

寂寞的高手,看下这2段汇编程序有什么区别?

2010-11-8 14:52
5454
.model small
.code
_start:
xor ax,ax
end _start


.model flat
.386
.code
_start:
xor eax,eax
end _start


上面的是16bit程序,编译后是MZ EXE文件,它只能在DOS下运行吗?
下面的编译后是PE EXE文件,它是WIN32程序还是保护模式程序呢?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
上面的是实模式下面的是保护模式吗?
2010-11-8 15:08
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
.model flat 平坦模式
2010-11-8 15:51
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
上面是16位程序,代码要分成DATA,CODE等64k段的内存模式

下面是win32程序,内存为平坦模式,没有64K的段大小限制,所有的WIN32的应用程序运行在一个连续、平坦、巨大的4GB的空间中。意味着无须和段寄存器打交道就可以寻址任意的地址空间。换句话来说,您可以当所有段描述符的基地址为0,界限为4G。
2010-11-8 17:17
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
那上面2段程序和保护模式有什么关系呢?
2010-11-9 09:00
0
雪    币: 341
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
由.model 决定了编译模式.
其化好像没什么好讲的,下面一个还有个.386 决定了代码运行的平台吧.
2010-11-9 09:53
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
下面那段代码 只能在进入保护模式之后 才能运行
2010-11-9 11:47
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
8
能写程序就是不理解模式之间的区别。。。
2010-11-9 12:30
0
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我是这么理解的:模式有关内存分配,应该是相对于CPU来说的,只是操作系统对他们的不同支持而已,dos 就是实模式,windows运行在cpu的保护模式之上,生成的可执行文件就是相对于操作系统来说的了。
2010-11-9 13:04
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
10
我想知道在实模式和保护模式下汇编编程的区别?
2010-11-9 14:09
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
一起学习
2010-11-9 14:33
0
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
1  内存分配区别,保护模式一般不用考虑分段,第二个是win32程序,因为它的内存分配4GB只有在保护模式下才有,实模式下肯定不能有flat
2 第一个程序应该也可以在其他操作系统中运行吧,只要不涉及被操作系统保护的层面(我没试过),因为dos汇编中很多都用的中断
2010-11-9 18:20
0
雪    币: 826
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习楼上的~
2010-11-9 18:28
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
向上上楼学习~~
2010-11-10 09:38
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
实模式与保护模式的汇编最大区别就是内存操作

实模式下, 默认cpu字长16位,地址线20位(1M内存空间),用mov eax,[ebx] 这样的间接寻址, ebx超过0xffff, CPU就死翘翘了,只能访问64kB的段. 用两个寄存器采用SEG:OFFSET的方式访问整个1M内存空间。

保护模式下, 80386后的CPU字长32位,地址线32位(4G地址空间),段可以不用地址映射, 就可以不用管段寄存器, 32位寄存器寻址就可以直接访问4G范围的内存。

当然保护模式的保护机制也限制了很多操作,中断处理的变化,访问数据的检查,控制转移的检查,特权指令和I/O操作的保护等等,不会像实模式那样随心所欲。想详细了解的话最好阅读下保护模式的相关资料。
2010-11-10 11:25
0
雪    币: 7113
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
15楼的说法不错!学习下!
2010-11-10 11:39
0
游客
登录 | 注册 方可回帖
返回
//