跳转至

15.Hello World

让我们来实现一下Hello World吧

assume cs:codesg,ds:data

data segment
    str db 'hello world','$'
data ends

codesg segment
    start:  mov ax,data
            mov ds,ax
            mov dx,offset str
            mov ah,9
            int 21H
            mov ah,4cH
            int 21H
codesg ends
end start

代码解析:

  • str db 'hello world','$' ​:定义了一个字符串 str​,内容是 'hello world'​,并以 $​ 作为字符串结束标志。这是因为 DOS 的 int 21H​ 中断服务号 9(打印字符串)以 $​ 为结束符。

  • 我们还可以实现不同数据直接换行、空格等等,只需要写入相应的ASCII码:

    • 换行:str db 'hello world',10,'123','$'
    • 空格:str db 'hello world',32,'123','$'
    • mov ax,data​:将数据段的段地址加载到寄存器 AX​ 中。
    • mov ds,ax​:将 AX​ 中的值(即数据段的段地址)加载到 DS​ 寄存器中,DS​ 是数据段寄存器,用于指向数据段。
    • mov dx,offset str​:将字符串 str​ 的偏移地址加载到寄存器 DX​ 中。DX​ 将作为指向字符串的指针。
    • mov ah,9​:将 9 加载到 AH​ 寄存器中,表示使用 DOS 中断 int 21H​ 的功能号 9,这个功能号是用来打印字符串的。
    • int 21H​:调用 DOS 中断 21H,使用功能号 9 来显示字符串 str​。
    • mov ah,4cH​:将 4cH 加载到 AH​ 中,表示使用 DOS 中断 int 21H​ 的功能号 4cH,这个功能号是用来终止程序的。
    • int 21H​:调用 DOS 中断 21H,使用功能号 4cH 终止程序的执行。