2.1.2 NASM编译器
来源:互联网 发布:低价机票 知乎 编辑:程序博客网 时间:2024/06/05 18:19
很多人在学习汇编的时候都可能是从I386学起的,使用的编译器是MASM(MASM 是Microsoft Macro Assembler 的缩写),其实NASM的格式与MASM总体上是差不多的。
值得说明的有如下几点:
1. [ ]的使用
在NASM中,如果你引用标签或者变量名, 都被认为引用的是该名字的地址,如果想访问他们里面的内容,必须使用 [ ]。这么理解如果不太容易记忆的话,那么你可以把他想象成C语言里的数组,数组名字代表的是它的地址,加上[ ]就代表的是它里面的内容。是不是一下子就明白了?其实,说不定C的编译器就是这么做的呢,毕竟C编译器会把代码编译成汇编代码,然后再编译成二进制文件的,对吧~!
2. $
$表示当前地址——当前行被编译后的地址。好像不太容易理解对吧,不要紧,请看下面的代码:
jmp $
这句汇编的意思就是死循环,转化成机器码是E9 FD FF,其中E9的意思是jmp,FD FF是个地址,但是在x86里面是小端排列的,所以要将数值转换为地址:FFFD,其实就是-3,这个jmp是相对跳转,跳转的地址就是执行完这条命令后,指令寄存器-3的地址,正好这条指令的长度就是3个字节,所以,又回到了这条指令重新执行。上述过程中,$指的就是地址E9啦。
3. $$
明白了
它表示的是一个节(section)的开始处被编译后的地址(就是这个节的起始地址)。我们一般写汇编程序的时候,使用一个section就够了,只有在写复杂程序的时候,才会用到多个section。section既可以是数据段,也可以是代码段。所以,如果把section比喻成函数,还是不太恰当。
提示:
在写程序的过程中,
times 512 - ( $ - $$) db 0
它的意思将在第三章给大家做详细解释,同时也希望有兴趣的同学,自己学习一下,就当做是一个课后作业吧,嘿嘿。~
本文已在图灵出版社社区连载中,欢迎大家前去阅读。
网址:http://www.ituring.com.cn/minibook/29303
- 2.1.2 NASM编译器
- nasm预处理器(2)
- Nasm
- NASM
- NASM
- nasm
- 1. 用户程序结构分析(实模式)-nasm编译器
- VS中使用nasm汇编编译器的方法
- Linux下配置汇编编译器NASM和bochs模拟器
- linux汇编编译器:GAS和NASM的比较
- NASM源代码分析之预处理(2)
- NASM 纯汇编打造简单中文操作系统(2)
- NASM概述
- 安装nasm
- 关于NASM
- NASM 2.00
- 学习NASM
- 有关NASM
- 玩转Protocol Buffers
- Android 自定义View (一)
- 15.如何自学Struts2之Struts2主题和模板[视频]
- 探讨PHP页面跳转几种实现技巧
- HDU 2042 不容易系列之二
- 2.1.2 NASM编译器
- ecshop供应商插件5.0使用技术交流QQ2785437314
- C语言标准库函数qsort排序的介绍与使用
- 2.1.3 汇编调用C函数
- Maven Install on Mac OS X
- KMP
- HDU 2043 密码
- 剖析程序中的栈与堆的内存分配
- 3.5 和变换相关的故障排除