如何从NASM中的文件中读取文本并将每行逗号分开?

时间:2014-06-19 16:55:48

标签: assembly text-files nasm

好的,我正在开发一个基于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中,我想让它检索我提到的用于列表框的逗号分隔列表)

1 个答案:

答案 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