| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4645 人关注过本帖
标题:[AT&T汇编语言]第二讲 helloworld程序
只看楼主 加入收藏
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
结帖率:96.55%
收藏
 问题点数:0 回复次数:1 
[AT&T汇编语言]第二讲 helloworld程序
这一讲主要为了验证开发环境是否搭建成功。
在下面的代码中做了比较详细的注释。
以'#'开始的是注释。
以'.'开始的是伪指令,是告诉汇编器如何编译这段代码的。具体的伪指令不再做详述,只要照猫画虎即可,想详细了解的可以查阅官方技术文档https://
以'%'开始的是寄存器名,Intel格式中表示寄存器是没有这个符号的。
以'$'开始的是立即数,Intel格式中表示立即数是没有这个符号的。在AT&T中表示16位立即数用“0x”的的形式。
对于用到的两个BIOS调用暂不做解释。最下面的启动扇区标志也先不解释,但以后的代码中会一直有这东西,具体原因以后再说。
以后的代码不会做这样的注释,只会对重点部分进行注释。

hello.s文件如下:
程序代码:
BOOT_SECT = 0x07c0            # 宏定义
    .code16                    # 将这个汇编代码编译成16位程序
    .section .text            # 这是代码段的内容
    .global _start            # 在目标文件中导出_start符号
_start:
    jmp $BOOT_SECT, $go        # 跳转到0x07c0段
go:
    mov %cs, %ax            # 初始化ds/es段寄存器
    mov %ax, %ds
    mov %ax, %es

 


    mov $0x0003, %ax        # 调用BIOS 10H功能号设定显卡模式
    int $0x10
    mov $0x1301, %ax        # 调用BIOS 10H功能号显式字符串。
    mov $0x0007, %bx
    mov msg_len, %cx
    mov $0x0000, %dx
    mov $msg, %bp
    int $0x10
cpu_hlt:                    # 停止CPU
    hlt
    jmp cpu_hlt

 


msg:                        # 字符串内容
    .ascii "Hello, world!"
msg_len:                    # 字符串长度
    .word .-msg

 


    .org 510                # 启动扇区标志
    .word 0xAA55

Makefile文件如下:
程序代码:
all: hello

hello: hello.o
    ld hello.o --oformat binary -m elf_i386 -Ttext=0x0 -o hello
   

hello.o: hello.s
    as hello.s --32 -c -o hello.o
   

clean:
    rm -f hello.o hello

make工具的使用是直接执行make命令。
如果不使用make工具,可以直接执行编译链接命令:
程序代码:
as hello.s --32 -c -o hello.o

ld hello.o --oformat binary -m elf_i386 -Ttext=0x0 -o hello



启动效果如图所示,上图是屏幕显式,下图是Bochs控制台。
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册



[此贴子已经被作者于2016-7-1 21:19编辑过]

搜索更多相关主题的帖子: 技术 Intel 伪指令 寄存器 
2016-07-01 17:44
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
顶一下~~~~~~~~~~
学习了!

能编个毛线衣吗?
2016-07-01 20:53
快速回复:[AT&T汇编语言]第二讲 helloworld程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023890 second(s), 12 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved