assembly NASM“hello world”in DOSBox

qcuzuvrc  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(77)

我正试图写一个程序在NASM的DOSBox的教育目的,一个简单的“你好,世界”。

section .data
    hello db 'Hello, World!', 0

section .text
    global _start

_start:
    ; Print the message to the screen
    mov ah, 9       ; AH=9 means "print string" function
    mov dx, hello   ; Load the offset address of 'hello' into DX
    int 21h         ; Call the DOS interrupt 21h to execute the function

    ; Exit the program
    mov ah, 4Ch     ; AH=4Ch means "exit" function
    xor al, al      ; Set AL to 0 (return code)
    int 21h         ; Call the DOS interrupt 21h to exit the program

字符串
在DOSBox中使用命令编译:
第一个月
运行只是键入:
hello.com
而不是“你好,世界!“我得到了乱码输出(很多随机字符)。原因是什么以及如何解决?

UPD:通过添加org 100h,并在消息后添加美元符号解决。

dba5bblo

dba5bblo1#

如果你试图创建一个COM程序,那么你在开始的时候就少了几行重要的代码

org 100h
entry: jmp _start

hello db 'Hello, World!$'

_start:

字符串
我已经30年没有用汇编语言编程了,我不记得“节”的定义,但是看看我的一些旧代码,你需要“org 100h”来为PSP留出空间。(entry:)后面的行表示“跳过数据定义到代码的开头”。
你看到的乱码要么是试图将PSP作为代码执行,要么是“hello”字符串作为代码执行。
此外,发送到函数9的字符串必须以美元符号结束,因此可能是您的代码“执行”data语句并继续向前显示随机数据(无论之前在内存中),直到达到美元符号。

相关问题