第一、二章

1**********************************************************************************

问:代码中的ORG、ALIGN和SECTION真正的作用是什么?

 

答:

org(伪指令):二进制程序的起点位置 它指定程序被加载到内存时,程序的起始地址。比如,下面的代码会产生longword: '0x00000104':

            org 0x100
            dd  label
     label:                             ;前4个字节存放lable的值
跟 MASM 兼容汇编器提供的'org'操作符不同,它们允许你在目标文件中跳转,并覆盖掉你已经产生的代码,而 NASM 的'org'就象它的字面意思“起点”所表示的,它的功能就是为所有内部的地址引用增加一个段内偏移值 ;它不允许 MASM 版本的'org'的任何其他功能。

section(伪指令):'SECTION'指令('SEGMENT'跟它完全等效) 改变你正编写的代码将被汇编进的段。 在 Flat-form Binary File 中没有什么实质性作用的。 某些目标文件格式中,段的数量与名称是确定的;而在别一些格式中,用户可以建立任意多的段。因此,如果你企图切换到一个不存在的段,'SECTION'有 时可能会给出错误信息,或者定义出一个新段,Unix 的目标文件格式和'bin'目标文件格式,都支持标准的段'.text','.data'和'bss'段,与之不同的是,'obj'格式不能辩识上面的段名,并需要把段名开头的句点去掉,即segment text, segment data, segment bss.用windows下的nasm写代码时会遇到这种情况,另外对于'obj'格式还要加上程序入口标识 '..start:'。

align(宏):提供一种便捷的方式来进行数据或代码的在字,双字,段或其他边界上的对齐。 它有两个参数,并会计算需要多少字节来存储当前段,当然这个字节数必须向上对齐到一个 2 的幂值。然后用它的第二个参数来执行'TIMES'前缀进行对齐。如果第二个参数没有被指定,那'ALIGN'的缺省值就是'NOP'。除非有特殊用途, 一般不需要第二个参数。需要注意的是,这个宏不进行错误检查:第一个参数不是2的幂值或第二个参数大于一个字节的代码, 在这种情况下,它将会继续错误的做下去


2*************************************************************************

问:$和$$的含义

答:

NASM在表达式中支持两个特殊的记号,即'$'和'$$',它们允许引用当前指令的地址。'$'计算得到它本身所在源代码行的开始处的地址;所以你可以简单地写这样的代码'jmp $'来表示无限循环。'$$'计算当前段开始处的地址,所以你可以通过($-$$)找出你当前在段内的偏移。

 

(详见nasm中文文档:http://www.bafee.cn/JC/Prog2/ASM/2429_20081125181831B1711.HTML)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值