as86汇编语法

来源:互联网 发布:up to date数据库官网 编辑:程序博客网 时间:2024/06/15 16:29

as86汇编语言程序

  • .global begtext,begdata,begbss,endtext,enddata,endbss 是全局标识符,供ld86链接用的
  • .text 是正文段 .data是数据段,.bss是未初始化数据段
  • entry start 告诉链接程序,程序是从start标号处开始执行
  • jmpi go,BOOTSEG 段间跳转
  • .org 510表示以后语句从地址510开始存放
  • 在as86汇编程序中,凡是以感叹号!或分号;开始的语句其后面均为注释文字,
  • 汇编指示符以一个字符.开始,并且不会在编译时产生任何代码,汇编指示符有一个伪操作码,后跟0或多个操作数组成,
  • 标号是后面带冒号的标识符
  • .global伪操作符用于定义随后的标号标识符是外部的还是全局的,并且即使不使用也强制引入。
  • .data .text .bss分别对应汇编程序编译产生目标文件中的3个段,即正文段、数据段和未初始化段。.text用于标识正文段的开始位置,并把当前切换到text段,.data用于标识数据段的开始位置,并把当前段切换到data段,而`.bss’用于标识一个未初始化数据段的开始,并把当前段改成bss段,
  • entry是保留关键字,用于迫使链接器ld86在生成的可执行文件中包括其后指定的标号’start‘。
  • 在as86中,间接操作数需要使用[]方括号对。
  • 定义字符串需要使用伪操作符.ascii,并且需要使用双引号盖住字符串 ,伪操作符.asciiz还会自动在字符串后面添加一个NULL(0)字符。
  • 定义字符需要使用伪操作符.byte,并且需要单引号把字符括住。
  • .org定义了当前汇编的位置。
  • 伪操作符.word用于在当前位置定义一个双字节内存对象,其后可以是一个数或者表达式

as86汇编语言程序的编译和链接

  • as86 -0 -a -o boot.o boot.s , ld86 -0 -s -o boot boot.o
    其中-0用于生成8086的16位目标程序,-a用于指定生成与GNU as和ld部分兼容的代码, -s选项用于告诉链接器要去除最后生成的可执行文件中的符号信息 -o指定生成的可执行文件名称。

as86和ld86使用方法和选项:

as的使用方法和选项:

as [-03agjuw] [-b[bin]] [-lm[list]] [-n name] [-o objfile] [-s sym] srcfile
默认设置:除了下列默认值,其他选项默认关闭或无
-3 使用80386的32位输出
list 在标准输出上显示
name 源文件的基本名词(即不包括.后的扩展名)

各选项 含义 -0 使用16比特的代码段 -3 使用32比特的代码 -a 开启与GNU as、ld的部分兼容性选项
    b
产生二进制文件,后面可跟文件名 -g 在目标文件中仅存入全局符号 -j 使所有跳转语句均为长跳转 -l 产生列表文件,后面可以跟随列表文件名 -m 在列表中扩展宏定义 -n 后面跟随模块名词,取代源文件名称放入目标文件中 -o 产生目标文件,后跟目标文件名 -s 产生符号文件,后跟符号文件名 -u 将未定义符号作为输入的未指定段的符号 -w 不显示警告信息

ld连接器的使用语法和选项:

对于生成Minix a.out格式的版本
ld [-03Mims[-]] [-T textaddr] [-llib_extension] [-o outfile] infile...
对于生成GNU-Minix的a.out格式的版本:
ld [-03Mimrs[-]] [-T textaddr] [-llib_extension] [-o outfile] infile...
默认设置:
-03 32位输出
outfile a.out格式输出

选项 解释 -0 产生具有16位比特魔数的头结构,并且对-lx选项使用i86子目录 -3 产生具有32比特魔数的头结构,并且对-lx选项使用i386子目录 -M 在标准输出设备上显示已链接的符号 -T 后面跟随正文基地址 -i 分离的指令与数据段输出 -lx 将库/local/lib/subdir/libx.a加入链接的文件列表中 -m 在标准输出设备上显示已链接的模块 -o 指定输出文件名,后跟输出文件名 -r 产生蛇和于进一步重定位的输出 -s 在目标文件中删除所有符号

此文章内容是笔者看《linux内核源码剖析》上进行的摘录笔记

原创粉丝点击