`
haoningabc
  • 浏览: 1478488 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

汇编的helloworld

阅读更多
在windows下
在装了F:\c\MinGW\lib的情况下

masm,nasm,gas,

test_win.s
.section .data
out_text:
    .asciz "hello world"
.section .text
.globl _main
_main:
    pushl $out_text
    call _printf
    pushl $0
    call _exit

这里用到了c运行时的main,exit,printf函数,因为win32的原因多加了个下划线
3.编译
as test_win.s -o test_win.o -gstabs 
ld test_win.o -o test_win.exe -LF:/c/MinGW/lib -lcrtdll

-gstabs保留了调试相关的符号表
-LF:/c/MinGW/lib -lcrtdll链接了c运行时,注意mingw路径是我机器上的

调试
gdb test_win.exe
l
b 5
r
i r

另外查看寄存器可用"i r"指令
★★★★★★★★★★★★★★★★★★
com版本的hello world
test.s
.code16
.text
    movw %cs, %ax
    movw %ax, %ds
    movw %ax, %es
    movw %ax, %ss
     
    movw $11, %cx
    movw $0x1301,%ax
    movb $0x07,%bl
    movw $0,%dx
    movw $outstring,%bp
    int $0x10
    jmp .
outstring:
    .asciz "hello world"

注意.code16是很有必要的
(2)编译
as test.s -o test.o 
ld test.o -Ttext 0x0100 -o test.exe
objcopy.exe -R .pdr -R .comment -R .note -S -O binary test.exe test.com
最后的objcopy将编译后的按binary输出成.com格式的

[另外如果跳过第二部exe生成,直接从.o生成.com也是可以运行的,不过对比发现有1bit的异常引起了输出字符的乱码
具体原因我就不去纠结的探索了,如果修改了那一比特,字符显示就正常了]
另外链接时的-Ttext 0x0100也可以用如下lds文件来控制
SECTIONS
{
. = 0x0100;
.text : {*(.text)}
}
同时链接时的选项应该为-Ttest.lds


此时如果ls -l一下会发现有将近4k之巨,这是因为填充了很多的0,用HxD这样的软件把结尾的0
给干掉再看其大小

参考http://www.cnblogs.com/pingf/archive/2011/03/09/1978263.html
分享到:
评论

相关推荐

    汇编helloworld

    汇编语言第一个入门程序,helloworld的asm格式文档

    汇编语言实现输出helloworld

    根据给定的文件信息,我们可以总结出以下关于“汇编语言实现输出HelloWorld”的相关知识点: ### 汇编语言简介 汇编语言是一种低级编程语言,它为每种类型的计算机提供了一对一的机器指令映射。汇编语言程序通常由...

    汇编hello world实例

    汇编编写hello world,供学习和交流使用,希望大家喜欢

    masm汇编helloworld模板

    在`HelloWorld.asm`中,我们可能会看到类似以下的代码片段,用于打印"Hello, World!": ```assembly section .data hello db 'Hello, World!',0 section .text global _start _start: ; 设置段寄存器 mov ax,...

    第一个汇编程序-Hello World

    第一个汇编程序-Hello World 调用MessageBoxA弹出对话框

    汇编语言hello,world

    在这里,我们将深入探讨如何使用汇编语言在DOS环境下编写和运行一个"Hello, World!"程序。 首先,我们有两个汇编源文件,`boot.asm`和`hello.asm`。`boot.asm`通常是引导加载器,负责将程序加载到内存并启动执行。...

    MASM_masmhellloworld_汇编语言helloworld_

    标题“MASM_masmhellloworld_汇编语言helloworld_”揭示了我们要讨论的主题,即使用Microsoft Macro Assembler(MASM)编写一个简单的“Hello, World!”程序。这是一个经典的编程入门示例,用于演示基本的汇编语言...

    cpp-HelloWorld执行的最小指令集和汇编器编译器

    当我们编写一个简单的"Hello World"程序并运行它时,背后涉及到一系列的底层操作,包括编译、汇编和执行等步骤。这里我们将深入探讨"Hello World"程序在C++中的最小指令集、汇编器和编译器的工作原理。 1. **最小...

    各种语言的Helloworld编程

    public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` JavaScript 在浏览器环境中可以这样写: ```javascript console.log("Hello, World!"); `...

    16位汇编集成开发环境(绿色免安装)

    我用过的最好的16位汇编编译软件,是以前别人用scite做的,现在网上好像搜不到,拿出来跟大家分享,对于自己学习DOS环境下汇编知识有很大帮助。 *解压可用免安装。 *可以分步调试,清楚的观察到所有寄存器和标志位的...

    x86汇编语言测试程序——输出“Hello World!”

    用x86汇编写的环境搭建的测试程序。如果输出“Hello World!”那么就表示环境搭建成功。大家可以下载尝试一下。

    深入浅出hello world

    从一个简单的hello,world程序开始,经过预处理、编译、汇编、链接、加载各个步骤详细介绍程序从编辑到执行的过程。深入的讲解了linux下程序的编译过程,并且讲解了linux kernel系统调用的相关知识。

    汇编HelloWold源码程序来源网络

    本篇将详细探讨由标题“汇编HelloWorld源码程序来源网络”所引出的知识点,以及描述中提及的在MASM6.11 XP环境下调试通过的情况。 首先,让我们从基础开始。"Hello, World!"程序是初学者接触编程时的典型例子,它在...

    asm_helloworld_world_

    标题“asm_helloworld_world_”暗示我们关注的焦点是一个用汇编语言编写的“Hello, World!”程序。在计算机科学的教育中,"Hello, World!"通常被用作初次接触新编程语言时编写的第一个程序,它能快速验证编译器和...

    简单的消息框源程序hello world!(汇编源码)

    本文将深入探讨一个基于汇编语言的简单消息框源程序——"hello world!",它是一个常见的入门级示例,适用于初学者理解和学习。 首先,"hello world!"程序是每个程序员接触编程时的首个例子,它在屏幕上打印出...

    变幻七彩HELLO WORLD!

    在8086汇编语言编程环境中,"变幻七彩HELLO WORLD!"是一个独特的程序示例,它展示了如何在单色屏幕上实现颜色变换的效果。这个程序的核心在于使用特定的指令序列来改变屏幕上的文本颜色,从而达到“变幻七彩”的...

    山东大学微处理器原理实验1.1工程文件 汇编程序 HelloWorld

    山东大学微处理器原理实验1.1工程文件 汇编程序 HelloWorld 详解博客地址:https://blog.csdn.net/m0_52316372/article/details/125664344

    GCC实例:打印 Hello World.pdf

    2. **编译**:GCC将源代码转换为汇编代码,然后再转换为目标文件(`.o`文件),这一步生成了`hello.o`。 3. **链接**:最后,GCC将目标文件与其他必要的库链接在一起,生成可执行文件(默认为`a.out`)。 在本例中...

    pe_只有.text段的helloworld汇编代码.zip

    本主题聚焦于一个特殊的汇编代码示例,即“pe_只有.text段的helloworld汇编代码”。这个程序被称为shellcode,因为它通常被用作在目标系统上执行的自包含代码片段。在PE(Portable Executable)格式的Windows可执行...

Global site tag (gtag.js) - Google Analytics