nasm 语法里面 bits 16和bits 32的深层意思是什么啊?

panpanf1 2009-02-09 04:30:10
我知道bits 32指的是如下的代码是32位的,但是这又是什么意思呢?在什么情况下用bits 16,什么情况下用bits 32呢?
...全文
1108 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnycomes 2011-08-05
  • 打赏
  • 举报
回复
不够详细啊
ibirds 2010-12-30
  • 打赏
  • 举报
回复
你可以把设置成[bits 16]然后编译输出列表文件nasm -f bin xx.asm -o xx.com -l xx.lst
然后再设置成[bits 32]然后编译输出列表文件nasm -f bin xx.asm -o xx.com -l xx32.lst
然后用记事本打开两个列表文件比较一下,带地址以及立即数的指令,16位的和32位的是不同的
panpanf1 2009-02-16
  • 打赏
  • 举报
回复
up
panpanf1 2009-02-12
  • 打赏
  • 举报
回复
up
liuqizealot 2009-02-10
  • 打赏
  • 举报
回复
16位段默认的操作数是16位的
32同理

16位段最大64K(IP SP BP SI DI是16位的,大了表示不了)
32位最大4G(EIP...是32位的)

指令好像没什么区别
panpanf1 2009-02-10
  • 打赏
  • 举报
回复
bits 16和bits 32在指令和数据上的使用有什么区别呢
猴猫喵 2009-02-10
  • 打赏
  • 举报
回复
在操作数大小不显式指明的时候用,比如:
push 0 ;既可以是push 0000 也可以是 push 00000000
编译器需要知道push后面几个字节是需要入栈的数,来生成适合16位模式或32位模式的代码。
harry_1523 2009-02-09
  • 打赏
  • 举报
回复
一般在实模式下用16位,保护模式用32位
有些时候一个nasm文件里,同时会处理16或者32位,例如在写实模式跳转到保护模式,在初始化保护模式中最后一句跳转指令所跳到的标号地址一定再[bits 32]下面

21,496

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧