第一、二章
2009-10-06 16:34
162 查看
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)
问:代码中的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)
相关文章推荐
- 《Java从入门到精通》第一、二章学习笔记
- 《Shell 脚本学习指南 》 -- 背景知识与入门 [第一、二章]
- [Java] 第一,二章 配置, 基础
- 《结构方程模型及其应用》学习笔记0504第一、二章
- 《Java 学习笔记》 第一、二章阅读体验
- 《Unix & Linux 大学教程》 - 第一、二章 学习笔记
- 第一、二章C语言概述
- (第一、二章)基础知识+CPU工作原理
- 《Rust 程序设计语言》第一、二章笔记 WIN7下安装Rust
- 《大话数据解构》第一、二章
- C Primer Plus学习笔记之第一,二章——预备知识
- 《LInux内核设计与实现》第一、二章读书笔记
- 《linux内核设计与实现》读书笔记第一、二章
- JS高程读书笔记-第一、二章-内附在线思维导图和quizlet卡片
- 阅读笔记之《你的灯亮着吗》第一,二章
- 《Linux命令行与shell脚本编程大全》 第一、二章 学习笔记
- 【软件工程】第一、二章总结
- Big Nerd iOS Programming 第一、二章笔记
- 2009-02-04读书记录——《代码大全》(第一版)第一、二章——欢迎进入软件创建世界
- win32多线程程序设计学习笔记(第一、二章)