| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 728 人关注过本帖
标题:关于nasm生成纯二进制汇编文件的段访问问题
只看楼主 加入收藏
bailichangqi
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-9-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
关于nasm生成纯二进制汇编文件的段访问问题
各位前辈好,小弟最近在看于渊的《一个操作系统的实现》这本书,从一个磁盘引导程序开始的   

以前看过一些汇编的书籍   但是都是跟dos相关的汇编,在处理段地址的时候都有很多指令  比如 seg获取段基址等等
但是现在nasm提示生成的纯二进制文件不支持段引用   那么  
1.我如何该确定自己写的代码某个段的段基址是多少呢?
2.现在似乎$操作符仍然有用  这个操作副现在还是表示当前处距离段基址的距离吗
3.当我在程序中使用了一个label加入有如下片段
mylabel:
mov ax,ax
...
mov ax,mylabel
此时放入ax中的值是什么呢?   是在内存中的绝对地址  如果是的话  这个值是多少位的呢?
脑子很乱   希望有前辈高人能不吝赐教!  非常感谢
搜索更多相关主题的帖子: 二进制 操作系统 如何 书籍 
2013-09-11 23:08
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:20 
在dos下,一个应用程序被加载后可以自己重新定位,展开,而脱离系统的管理,很有趣
2013-09-12 09:39
bailichangqi
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-9-11
收藏
得分:0 
回复 2楼 xkwy0000
您好,我现在很困惑的是纯二进制的汇编下面的一些问题  看到有说Label的值会被编译器转换成相对于程序开头的偏移值 是这样吗?  如果是的话 那么这个值有多大呢  是32位的  还是16位的呀如果不是这样  我该怎么确定另一个段的值呢
不考虑保护模式  就只论实模式   内存中的一个位置可以有多种段值+偏移的表示 比如我有以下代码
mov ax,ax
...
...   <--这是一段很长很长的代码或者数据段的定义  超过了一个段的最大长度
...
mov bx,bx
当我在执行完mov ax,ax之后想跳到下面的mov bx,bx去  我该如何去确定mov bx,bx的段值+偏移地址呢    难道说要我自己手算吗
问题有点长,很不好意思,希望您能不吝赐教
我现在使用的是nasm编译器
2013-09-12 12:29
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:0 
对于编译器nasm,没有使用过,如果说受到编译器的限制,不大好办,得需要修改nasm
在masm下,label很好用的
64k的空间,程序段足够用了,有必要的话,像windows那样大的程序,采取些措施也可以吧,把数据段单列出去,也就是分段,就可以避免
可能我说的不是你想说的问题
2013-09-12 19:08
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:0 
在masm下:
   mov ax,ax
   call 标号名
   ------
   ------
   。。。。
   标号名  label  FAR
   mov bx,bx
   ------
   RETF
2013-09-12 20:08
快速回复:关于nasm生成纯二进制汇编文件的段访问问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016143 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved