16位代码段与32位代码段的区别:
16位代码段与32位代码段的区别如下:
16位代码段最长只能为64k,段内偏移量为16位,默认的指令地址及操作地址为16位;
 32位代码段最长可以4G,段内偏移量为32位,默认的指令地址及操作地址为32位。
是否能够使用   eax,   edx   等寄存器与是否使用16位代码段及32位代码段无关。16位代码段、32位代码段都可以使用   eax,   edx   等寄存器。
如果要使用   eax,   edx   等32位寄存器,必须在代码中指定   .386,   .386p,   .486,   .486p   等指示符。
在DOS实模式下,只能使用16位代码段。
在MASM中,如果把   .386,   .386p,   .486,   .486p   等指示符放在   .model   之前,那么所有的段(数据段、代码段)默认为32位; 如果把   .386,   .386p,   .486,   .486p   等指示符放在   .model   之后,那么所有的段(数据段、代码段)默认为16位。

可以在定义段时,用   USE16   或   USE32   明确指定是使用16位的段(数据段、代码段)还是32位的段(数据段、代码段)。

部分参考资料:

http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_8/CH08-3.html#HEADING3-42
首先要明确两个概念:寄存器的位数和段的位数是两个不同的概念。
寄存器的位数这个很容易理解~段的位数却有点麻烦。
我们知道,8086的CPU的寄存器是16位的,80386以上的CPU是32位的;这在汇编语言中的体现就是.386p等伪指令。
如果你使用了.386p伪指令,那么汇编的编译程序才会将你的指令编译为80386认识的机器指令,汇编语言默认的是使用.8086伪指令,很明显,这个时候汇编编译程序只是将你的汇编程序编译为8086认识的机器语言,这个时候当然也不可以用EAX等寄存器了,不然编译程序会出现错误提示。如果你要使用EAX等寄存器,就要这个之前加上.386或者之上的伪指令。
简单的来说,寄存器的位数是.386等伪指令决定的,和其他无关。
而段的位数却是由段定义说明中的use16和use32这两个中的其中一个决定的。其实,汇编编译程序在将USE16或者USE16编译成机器语言的时候,就是段描述符中的第6个字节的第6位(我们一般称为D位),如果是USE16,就将该为设为0,如果是USE32,就设置为1
16位的代码段和32位的代码段很明显的一个区别就是段大小的限制:一个是64k,一个是4G。细节上却有很多差别,比如对于一个Push   10h这样一个指令,如果段是16位的,sp=sp-2,如果段是32位
的,就是sp=sp-4,当然,如果如果你是PUSH   EAX的话,无论段是16位还是32位,都是SP=SP-4。
还有很多细节,这里就不多说了。

16位代码段与32位代码段的区别相关推荐

  1. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  2. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)...

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  3. QGIS编译---QGIS2.14.16 + Qt4.8.6 + VS2010 ---32位版本

    编译前须知(有必要的几句啰嗦): 1.莫被这个教程的篇幅吓到,其实篇幅不大.就算大家觉得太啰嗦,请见谅,笔者写教程就是喜欢详细,喜欢面面俱到.再者,本教程是为了解答很多人编译QGIS遇到的头疼问题,虽 ...

  4. 64位的电脑比32位的电脑跑的快么?「多图预警」

    前言 代码写了那么多,你知道 a = 1 + 2 这条代码是怎么被 CPU 执行的吗? 软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电 ...

  5. 32位算术逻辑运算单元alu设计_64位的电脑比32位的电脑跑的快么?多图预警

    前言 代码写了那么多,你知道 a = 1 + 2 这条代码是怎么被 CPU 执行的吗? 软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电 ...

  6. 64位系统下一个32位的程序究竟可以申请到多少内存?

    64位系统下一个32位的程序究竟可以申请到多少内存? cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设 ...

  7. 64位系统VBS调用32位COM组件

    64位系统VBS调用32位COM组件 标签: 32位, 64位, COM, COM组件, VB, VBS, VBScript 标题: 64位系统VBS调用32位COM组件 作者: Demon 链接:  ...

  8. 在64位linux下编译32位程序

    一般情况下我们最好是在一个平台上编译本平台的二进制程序,比如在32位平台上编译32位程序而在64位平台上编译64位程序. 现在64位的系统(这里主要指x86_64系统,包括AMD64和Intel的EM ...

  9. 你为什么需要在64位系统下用32位程序

    在64位系统下,用64位的程序自然是能够充分利用cpu中的64位指令和64位的地址空间,可有的时候,我们却不得不在64位系统下使用32位的程序. 64位和32位 对于64位还是32位,首先要从概念上把 ...

最新文章

  1. php每分钟刷新一次的验证码,php如何在进入页面的时候自动刷新一次验证码
  2. js怎么获取访问页数记录(知道的能不能告诉我一下)
  3. boost::hana::comparing用法的测试程序
  4. mysql round 0.1111_听说Mysql你很豪横?-------------分分钟带你玩转SQL高级查询语句(库函数,存储过程)...
  5. JMeter中如何实现跨线程组关联
  6. linux video属性_Linux 下Video 的制作方法
  7. 很累很失败,发奋学英语
  8. WEB SERVER调优
  9. 使用pyqt开发gui(pyqt集成到pycharm)
  10. linux开启防火墙教程,linux系统开启防火墙及开放端口操作步骤
  11. 5G大规模MIMO技术
  12. 第3-4课:爱因斯坦的思考题(上)
  13. html5 拉弓,瞄准 拉弓 射出梦想
  14. 5s进水不开机怎么办 苹果5s进水后无法开机的维修方法
  15. 关于 C4D R18 载入闪退
  16. c语言肤色检测,基于肤色的人脸检测
  17. 如何实现广告精准投放?一文获得新思路
  18. Sql Server插入随机数
  19. ReactNative学习笔记(七)——ref属性的用法和可点击组件
  20. 计算机word茶的功效,乌龙茶的功效与作用 Microsoft Word 文档

热门文章

  1. 各种友(e)善(xin)数论总集,从入门到绝望2
  2. 使用深度V8.1 系统后打开部分文件夹缓慢
  3. 【51nod】2590 持续讨伐
  4. css:position
  5. SQL基础篇---函数及其函数配套使用的关键字
  6. 高级软件工程课程第二次作业
  7. 盘点机器学习和统计模型的差异
  8. Mybatis各种模糊查询
  9. 银行事后监督及票据影像光盘缩微系统
  10. 构建一个计算机网络,计算机网络--网络构建(一)