Chinaunix首页 | 论坛 | 博客
  • 博客访问: 959992
  • 博文数量: 134
  • 博客积分: 7443
  • 博客等级: 少将
  • 技术积分: 1411
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-10 20:18
文章分类

全部博文(134)

文章存档

2012年(7)

2011年(29)

2010年(16)

2009年(6)

2008年(18)

2007年(58)

分类:

2007-11-20 22:01:09

你是否渴望回到那样的时代,当男人像男子汉并且能自己编写驱动程序? ---Linus

NASM手册:

     NASM: 开源的,x86体系的,跨平台的汇编器.

NASM和MASM的不同点:
     NASM大小写敏感.
     访问一个内存地址的内容,在地址值上添加中括号
     不存储符号的变量类型,再指令中显示的制定类型
     不能自动识别远调用还是近调用,必须显式指定
     优秀设计无不化繁为简,放下并自在.

NASM的汇编语言的语句
     格式:lable: instruction operands     ;commit
     两种指令: 预编译指令或汇编指令
    
Directives和Instruction难道都翻译程指令,真不好办.

数据定义用到的伪指令
     d*系列定义初始化的数据
     res*系列定义未被初始化的数据
     INCBIN可以导入外部文件中的数据
     EQU定义常量
     times重复指令.对数据定义和真实指令都可以使用.
     道生一,一生二,二生三,三生万物.
     万物归三,三归二,二归一,一归道.
       
有效地址
    指定地址的时候可以使用各种表达式:段前缀,计算表达式
    看来这些表达式必须由NASM计算,把结果写到目标代码,而不是生成计算代码.

常量
     支持各种常用进制的整数常量,十进制,十六进制,八进制,二进制
     单引号定义字符常量,栈式存放
     浮点数常量,也有各种不同的精度   

表达式
     特殊变量,$当前地址,$$当前段的地址
     逻辑位计算,四则运算等.
     SEG操作符取段基地址
     WRT = With Ref to, 得到一个符号相对于其他的段地址的偏移       
     关键字STRICT, 严格按照字符长度操作,不做优化

限制表达式
     NASM使用两次遍历:第一遍计算长度,第二遍产生代码
     两次遍历导致了限制,为了更好的描述这些限制,规定了一些指令只能使用限制表达式,
     限制表达式的值,必须在第一遍遍历中就能够计算出来.

本地标签(符号)
     以点开头的标签为本地标签,和上一个非本地标签关联
     使用..@开头的标签,在宏定义中使用,(我觉得应该叫它,相对标签)。
     实际上在宏中使用的是%%开头的标签,被预处理器处理程..@开头,
     预处理,宏展开后保证每个这样标签是全局唯一的
    
预处理器
     代码在宏定义层次上不过是数据。程序员的思维在不同的层次中跳跃.
     当在递归的多维空间游荡时,一个不成熟的程序员是会迷路的.
     强大的宏预处理器: 条件组合,多级包含,多行或单行,上下文栈机构
     宏定义中可以带参数.
     %define宏自在调用时展开,%xdefine宏在其他宏定义中也可以被展开.
     宏连接符号"%+",把字符串加在一起.
     %assign,使用数字计算的表达式来定义数字量.
     含有函数性质的宏,使用函数的运算结果为宏的值,substr,strlen
     使用贪婪(greedy)参数把多余参数,拼接程逗号分隔的列表,可以被d*伪指令直接使用.
     宏还支持默认参数
     类似shift调用的,%rotate和个数特殊遍历%0, 似乎是给变参数个数的函数准备
     奇怪的条件参数,是指令的一部分.,
     条件组合,和C语言的编译预处理相似.一大堆条件表达式的预处理指令
     包含文件,而且像C语言一样防止多次包含.
     %rep循环,多次调用多行的宏,
     预处理中的上下问栈(比较独特的一个东西.)
     在多个宏定义中共享label,形成共通完成一个功能的复杂macro.
     在栈中保存上下文环境,在上下文环境中定义label
     能使用这东西在宏级别上实现各种控制流
     NASM定义了许多标准宏,如果宏是函数,那么这应该就构成的标准汇编函数库

Assembler Directives
    User Level Directive VS Primative Directive
    Format-specific Directive
    0x66, 0x67 prifix is use on diffecter bit instruction.
    Extern 定义外部符号, 这和C语言很像,这只有部分文件格式支持。

支持好多系统的各种各样的格式,不同格式也有自己独特的汇编指令
    bin: Flat-Form Binary Output.
        传说中的引导扇区,就是把这种格式的文件写到了磁盘的开头的扇区里面.
    obj: Microsoft OMF Object Files
    win32: Microsoft Win32 Object Files
    win64: Microsoft Win64 Object Files
        微软竟然敢宣称他们的格式和coff兼容
    coff: Common Object File Format
    macho: Mach Object File Format
    elf,elf32,elf64: Executable and Linkable Format Object Files
    aout: lINUX 'a.out' object file,早期的linux使用
    aoutb: BSD a.out Object files.
    as86: Minix/Linux 'as86' Object Files
    rdf : Relocatable Dynamic Object File Format
    dbg: Debugging Format 
  
阅读(2695) | 评论(0) | 转发(0) |
0

上一篇:我失眠了吗?

下一篇:386保护模式图集

给主人留下些什么吧!~~