第一条汇编程序:Hello World 的底层实现

经典的 Hello World

在高级语言中,print("Hello World") 只需要一行。在汇编中,你需要:

1. 定义数据段

2. 设置显示功能号

3. 调用中断

4. 设置退出功能号

5. 再次调用中断

完整源码


DATA SEGMENT
    MSG DB 'Hello, Assembly World!$'
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE, DS:DATA
START:
    MOV AX, DATA
    MOV DS, AX          ; 初始化 DS 寄存器

    MOV DX, OFFSET MSG  ; 字符串偏移地址放入 DX
    MOV AH, 09h         ; DOS 中断 09h: 显示字符串
    INT 21h             ; 调用中断

    MOV AH, 4Ch         ; DOS 中断 4Ch: 退出程序
    INT 21h

CODE ENDS
    END START

逐行解析

1. 数据段定义


DATA SEGMENT
    MSG DB 'Hello, Assembly World!$'
DATA ENDS
  • `DB` 定义字节数据
  • `$` 是字符串结束符(DOS 09h 中断要求)
  • 2. 初始化 DS

    
    MOV AX, DATA
    MOV DS, AX
    

    CPU 不允许直接将立即数送入段寄存器,必须通过通用寄存器中转。

    3. 调用显示中断

    
    MOV AH, 09h
    MOV DX, OFFSET MSG
    INT 21h
    
  • `AH=09h` 告诉 DOS:"我要显示字符串"
  • `DX` 存放字符串的偏移地址
  • 4. 安全退出

    
    MOV AH, 4Ch
    INT 21h
    

    如果不写退出代码,程序会继续执行内存中的随机数据,导致崩溃。

    编译与运行

    
    masm hello.asm;   # 生成 hello.obj
    link hello.obj;   # 生成 hello.exe
    hello.exe         # 运行
    

    总结

    第一个汇编程序虽然只有十几行,但它涵盖了汇编的核心要素:段定义、寄存器操作、中断调用

    下一篇:《8086 指令系统全景图:数据传送、算术运算与逻辑操作》


    原文链接:https://wenyiblog.top/2026/06/asm-04-first-program/

    首发于文艺技术笔记(wenyiblog.top),转载请注明出处。

    posted @ 2026-06-22 19:28  软件工程师文艺  阅读(1)  评论(0)    收藏  举报