我正在学习汇编 (NASM) 并使用 Linux 系统调用。
我在使用以下代码时遇到问题。我正在尝试打电话sys_mkdir。应创建一个目录“Hello World”。但是,它正在创建以下Hello World?asmtest??. 为什么是这样?如何title包含以及如何删除?.
SECTION .data
msg: db "Hello World", 10
len: equ $-msg
title: db "asmtest", 7
mode: dd 755
SECTION .text
global main
main:
; Make a directory
mov ecx,mode
mov ebx,msg
mov eax,39
int 0x80
; Print Hello World to screen
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80
; Exit
mov ebx,0
mov eax,1
int 0x80
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您正在访问的函数调用是系统调用。虽然它不是 C 标准库的一部分,但此调用(以及许多类似的调用)中的字符串处理非常“像 C”,这意味着字节字符串始终以 null 结尾。
在您的情况下,由于您定义了两个字符串(中间有一些特殊字符,例如“10”和“7”),因此它将使用在指向的内存位置找到的第一个字符中的所有内容,msg并继续直到它发生查找空字节 ( 00)。
如果将 your 替换, 10为, 0将sys_mkdir正常工作,但您必须调整该字节才能使打印功能正常工作。