我正试图写一个程序在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
,并在消息后添加美元符号解决。
1条答案
按热度按时间dba5bblo1#
如果你试图创建一个COM程序,那么你在开始的时候就少了几行重要的代码
字符串
我已经30年没有用汇编语言编程了,我不记得“节”的定义,但是看看我的一些旧代码,你需要“org 100h”来为PSP留出空间。(entry:)后面的行表示“跳过数据定义到代码的开头”。
你看到的乱码要么是试图将PSP作为代码执行,要么是“hello”字符串作为代码执行。
此外,发送到函数9的字符串必须以美元符号结束,因此可能是您的代码“执行”data语句并继续向前显示随机数据(无论之前在内存中),直到达到美元符号。