• 用汇编语言输出Hello World!


    https://zhuanlan.zhihu.com/p/147696502

    众所周知,首先从输出“Hello World!”开始学习一门编程语言已经是惯例了,汇编语言也不例外,下面我们将从输出“Hello World!”开始学习汇编语言。

    一、编写源程序

    首先我们尝试用C语言来实现该功能:

    #include <stdio.h>
    
    int main() {
        printf("Hello World!"); // 输出“Hello World!”
        return 0;
    }

    可以看到,仅仅用了一行代码就实现了该功能。那么用汇编语言又该如何去实现呢?

    data segment ;数据段
        string db 'Hello,World!$'
    data ends
    code segment ;代码段
    assume cs:code,ds:data
    start:
        mov ax,data ;获取段基址
        mov ds,ax ;将段基址送入寄存器
        mov dx,offset string
        mov ah,9
        int 21h
        mov ah,4ch
        int 21h
    code ends
    end start

    下面对该汇编程序的部分代码进行说明:

    string db 'Hello,World!$'
    定义一个名为string的字符串,string是字符串的名称,db是定义字节说明,字符串内容需用单引号括起,其中 $ 是串的结束标志
    assume cs:code,ds:data
    这是一条汇编伪指令,含义是指定code段与CS寄存器关联,data段与DS寄存器关联
    mov dx,offset string
    获取string的偏移地址
    mov ah,9
    int 21h
    调用9号DOS功能(显示字符串 )
    mov ah,4ch
    int 21h
    调用程序结束功能

    对比两段代码,显然同样的功能用汇编语言实现起来比用C语言实现起来更加复杂。这是因为汇编语言是低级编程语言,而C语言等是高级编程语言,汇编语言更加接近底层。程序员用汇编语言来编写程序实际上都是对CPU中的寄存器进行操作,汇编语言编程是针对寄存器来进行编程的。

    二、对源程序进行编译

    汇编语言程序从设计到形成可执行程序文件,在计算机上的操作过程分为三步:编辑、汇编、连接。用文本编辑程序写程序,形成.ASM文件,用汇编程序对.ASM文件进行汇编,形成.OBJ文件,再用连接程序对.OBJ文件进行连接,形成.EXE文件。

    1. 编辑

    新建一个名为HELLO.ASM的文件,用文本编辑器将源程序写入该文件中。

    2. 汇编

    汇编程序的作用是把汇编语言源程序翻译成为机器代码,产生二进制格式的目标文件(Object File)

    在DOS中输入以下命令:

    MASM HELLO.ASM

    3. 连接

    连接就是使用连接程序LINK把目标文件(OBJ)转换为可执行的EXE文件

    在DOS中输入以下命令:

    LINK HELLO.OBJ

    三、在Debug模式下调试程序

    程序必须经过调试阶段,才能观测结果和发现程序中的错误。

    在DOS中输入以下命令:

    debug hello.exe

     

     

     

    用Debug调入HELLO.EXE,出现-Debug命令提示符。在-后可键入Debug命令进行调试。

    四、运行程序

    在DOS中输入以下命令:

    hello.exe

    运行结果:


     
     
     
  • 相关阅读:
    汇编 Hello Window [菜鸟]疑问
    得到指定进程所有窗口。显示 影藏 置顶。
    汇编,SendMessage和WM_SETTEXT
    C#: 字段和局部变量的作用域冲突
    C#: 给方法传递参数
    C#:类和结构
    C#: string 类型
    Copy files to a folder which need have Administrator approve and overwrite the existing same readonly files
    C#:构造函数
    C#:数组, 命名空间, Main()方法
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/15699754.html
Copyright © 2020-2023  润新知