好的,我正在开发一个基于MikeOS的项目,我试图从文本文件中获取逗号分隔列表。例如,如果文本文件有"你好"在第1行"世界"在第2行和"!"在第3行,我想要回归"你好,世界,!"这是可能的,如果是这样,我怎么能这样做。我对NASM相对较新,但我对它有基本的了解。任何帮助将不胜感激:D
pop si
push si
mov bx, si
mov ax, si
call os_string_length
mov si, bx
add si, ax
dec si
dec si
dec si
mov di, txt_ext
mov cx, 3
rep cmpsb
jne bad extension
pop si
mov ax, si
mov cx, 32768
call os_load_file
call os_clear_screen
(现在代码中的文本文件被加载到ram中,我想让它检索我提到的用于列表框的逗号分隔列表)
答案 0 :(得分:0)
鉴于你的评论,我假设你对组装有一个非常基本的了解,所以让我们从一些C代码开始。您已经将文件加载到RAM中,因此您只需通过用逗号替换换行来创建逗号分隔列表;在代码中:
void to_list(char *text) {
while(*text != '\0') {
if(*text == '\n')
*text = ','
text += 1;
}
}
现在,自从我最后一次在x86程序集中编程以来已经过去了很长时间,但是线到线的翻译将会是这样的:
to_list: ; text is passed in the si register
pusha
mov bl, 2ch ; ASCII code for ','
to_list_loop:
mov al, [si] ; load the character
cmp al, 0 ; end of string?
je to_list_ret
cmp al, 0dh ; newline?
jne to_list_inc
mov [si], bl ; if yes, replace with a comma
to_list_inc:
inc si ; and go to next character
jmp to_list_loop
to_list_ret:
popa
ret