回 帖 发 新 帖 刷新版面

主题:段的问题

我搞不清16位段与32位段的具体差别在哪。在段定义中的use 16,use 32到底是啥意思?
有啥区别?能给具体讲一下吗?或推荐一本书?

回复列表 (共2个回复)

沙发

use 16就是用16位汇编
use 32就是用32位指令汇编

8086都是16位的
到80386一般都扩展到了32位的了

板凳

要彻底搞清除这个问题要用到保护模式汇编语言的知识,USE16/32对应于段选择子的D的值0/1.
use16/32的具体体现在很多地方,比如push 1的时候,sp=sp-2还是sp=sp-4是由use16/32决定的;段的最大长度是64K还是4G,也是由use16/32决定的;jmp label指令的时候,应该用后面的2个的地址还是4个字节的地址,也是由use16/32决定的,还有一些深层次的体现,这要你自己去解决.
总的来说,use16/32就好像一个指示器,当CPU遇到一些可以当成是16位也可以当成是32位处理的数据或者指令的时候,就用到了USE16/32.
use 16就是用16位汇编
use 32就是用32位指令汇编
是一个比较模糊的说法,这样的说法会令初学者疑惑use16下为什么可以使用EAX这样的寄存器,use16下为什么可以用movzx eax,ax这样的指令.

我来回复

您尚未登录,请登录后再回复。点此登录或注册