免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 10131 | 回复: 26
打印 上一主题 下一主题

请教 AT&T 的伪指令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-24 22:18 |只看该作者 |倒序浏览
请问AT&T语法中,有没有ntel语法中的org,$和$$的功能的对应伪指令?
或者其他实现方式?
我google了好久还是没找到答案,非常感谢!

论坛徽章:
0
2 [报告]
发表于 2007-04-25 21:47 |只看该作者
原帖由 hshq_cn 于 2007-4-24 22:18 发表于 1楼  
请问AT&T语法中,有没有ntel语法中的org,$和$$的功能的对应伪指令?
或者其他实现方式?
我google了好久还是没找到答案,非常感谢!



给个邮箱吧,发个 <gnu assembler> 给你

论坛徽章:
0
3 [报告]
发表于 2007-04-26 19:55 |只看该作者

回复 #2 mik 的帖子

非常感谢,这个书我也刚好找到一本,对应的.org指令好像好像有点复杂,也找到了一些网友翻译的网页;
在看《自己动手写操作系统》,源代码使用intel语法,使用nasm汇编器,可以直接生成bin格式(plain binary file),我想用at&t语法,使用gnu的binutils;
今天又看了一些资料,也搜到了binutils的邮件列表里面了,才了解了as+ld+objcopy生成bin文件的方式,因为as只能生成obj文件,需要ld和objcopy的附加操作才可以;
找到一个很好的站点http://gro.clinux.org/,里面有好些小型的学习目的、个人开发的OS,其中有些是at&t语法的,应该能以其他方式解决我的问题。

[ 本帖最后由 hshq_cn 于 2007-4-26 19:56 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-05-09 16:39 |只看该作者
《gnu assembler》能给我发一本吗
huaihuaixiaoshao@yahoo.com.cn

论坛徽章:
0
5 [报告]
发表于 2007-05-09 20:54 |只看该作者

评分

参与人数 1可用积分 +15 收起 理由
mik + 15 兄弟提供的这个参考文档不错!

查看全部评分

论坛徽章:
0
6 [报告]
发表于 2007-05-09 23:21 |只看该作者
有.org 伪指令。
不过我不知道$ $$是什么意思,所以不知道at&t对应什么……

论坛徽章:
0
7 [报告]
发表于 2007-05-11 21:25 |只看该作者
$表示当前行被汇编后的地址
$$表示一个session的开始出被汇编后的地址

论坛徽章:
0
8 [报告]
发表于 2007-05-12 20:21 |只看该作者
原帖由 坏坏小少 于 2007-5-9 16:39 发表于 4楼  
《gnu assembler》能给我发一本吗
huaihuaixiaoshao@yahoo.com.cn


已经给你发了

论坛徽章:
0
9 [报告]
发表于 2007-05-12 20:32 |只看该作者
多谢了 还是pdf看起来舒服

论坛徽章:
0
10 [报告]
发表于 2007-05-12 20:34 |只看该作者
下面是《自己动手写操作系统》的第一个例子,开机引导时打印一条语句;
用的是nasm,intel格式。
    org    07c00h            ; 告诉编译器程序加载到7c00处
    mov    ax, cs
    mov    ds, ax
    mov    es, ax
    call    DispStr            ; 调用显示字符串例程
    jmp    $            ; 无限循环
DispStr:
    mov    ax, BootMessage
    mov    bp, ax            ; ES:BP = 串地址
    mov    cx, 16            ; CX = 串长度
    mov    ax, 01301h        ; AH = 13,  AL = 01h
    mov    bx, 000ch        ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
    mov    dl, 0
    int    10h            ; 10h 号中断
    ret
BootMessage:        db    "Hello, OS world!"
times     510-($-$$)    db    0    ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw     0xaa55                ; 结束标志


下面是我改的at&t格式。

.code16

movw    %cs,    %ax
movw    %ax,    %ds
movw    %ax,    %es

movw    $bootMessage,    %ax
movw    %ax,    %bp
movw    $bmLength,    %cx
movw    $0x1301,    %ax
movw    $0x0c,    %bx
movb    $0,    %dl
int    $0x10

jmpw    *(.)

    bootMessage:
.ascii    "Hello, OS world! I'm comming!^_^!"
.equ    bmLength,    . - bootMessage

.org    510
.word    0xaa55



下面是at&t格式代码的编译方法。

as boot.s -o boot.o
ld boot.o -o boot.bin -s --oformat binary -Ttext 0x7c00

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP