主题:段的问题
kkk19850712
[专家分:140] 发布于 2006-10-11 18:54:00
我搞不清16位段与32位段的具体差别在哪。在段定义中的use 16,use 32到底是啥意思?
有啥区别?能给具体讲一下吗?或推荐一本书?
回复列表 (共2个回复)
沙发
救世猪猪 [专家分:560] 发布于 2006-10-12 22:41:00
use 16就是用16位汇编
use 32就是用32位指令汇编
8086都是16位的
到80386一般都扩展到了32位的了
板凳
chenzep [专家分:3640] 发布于 2006-10-13 09:16:00
要彻底搞清除这个问题要用到保护模式汇编语言的知识,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这样的指令.
我来回复