在NASM中将两个字符串连接在一起

时间:2014-11-17 23:42:26

标签: linux assembly x86 nasm

我在谷歌寻找方法来做到这一点,我发现了一些,但我发现它们对我所需要的东西过于复杂。对于初学者来说,我需要通过一个循环来完成,我放置字符串的地方最初也是空的,所以我确信这肯定会产生一些问题。

无论如何这是我的代码:

%include "io.mac"

.DATA
    filename_msg db 'Enter the file name: ', 0
    number_prompt_msg db 'Enter the number of bases: ',0 ;asks for the number of bases to be used 
    finish_msg db 'Operation completed, DNA file generated',0 ;tells the user when the file is complete
    error_msg db 'Operation failed, please try again', 10
    base_A db 'A',0
    base_C db 'C',0
    base_G db 'G',0 
    base_T db 'T',0
    base_length equ $ - base_A
;----------------------------------------------------------------------------------------------------
.UDATA
    number_of_bases rest 1 ;defined by the user 
    random_number resb 1   
    filename: resd 20       ;defined by the user
    base rest 1
    file_descriptor resd 1    ;used to generate the file
    characters_to_write rest 1
;-------------------------------------------------------------------
;start of code, and message prompts for the user
.CODE 

    .STARTUP

;asks user for filename 
ask_details:
    PutStr filename_msg
    GetStr filename, 300

    ;asks user for the number of bases
    PutStr number_prompt_msg 
    GetLInt [number_of_bases]

;------------------------------------------------------------
;file creation 
    mov EAX, 8  ;creates the file
    mov EBX, filename
    mov ECX, 644O   ;octal instruction 
    int 80h     ;kernel interrupt
    cmp EAX,0   ;throws error if something is amiss
    jbe error 
    mov [file_descriptor],EAX
    mov ECX,[number_of_bases]
;-------------------------------------------------------------
;randomization of base numbers 
writing_loop:
    rdtsc 
    mov EAX, EDX
    mov EDX, 0
    div ECX
    mov EDX, 0
    mov EBX, 4
    div EBX 
    mov [random_number], EDX
    mov EDX, 0
    mov EAX,[random_number]
    cmp EAX,0
    je assignment_A
    cmp EAX,1
    je assignment_C
    cmp EAX,2
    je assignment_G
    cmp EAX,3
    je assignment_T
join_char:
    mov [base + EBX],EBX
    loop writing_loop 
    PutStr base
    .EXIT
;------------------------------------------------------------
;file generation error message 
error:
    PutStr error_msg
    jmp ask_details
;------------------------------------------------------------
;assignments 
assignment_A:
    mov EBX, [base_A]
    jmp join_char

assignment_C:
    mov EBX, [base_C]
    jmp join_char

assignment_T:
    mov EBX, [base_T]
    jmp join_char

assignment_G:
    mov EBX, [base_G]
    jmp join_char

首先,它将我用rdtsc获得的一些随机数进行比较,根据出现的情况,它会给EBX分配一个字母,然后该字母(base_A,base_C,base_T或base_G)应该进入base。我试过用 mov [base + EBX],EBX但是那只是打印了一个空的空间,我使用了它,因为它似乎适用于我看过的例子中,但我不确定连接在NASM中是如何工作的。如果可能的话,我不知道是否有人知道将这些字符连接在一起的任何简单方法。这真的很小,所以我希望我不需要添加很多代码,我需要这个字符串的唯一方法就是稍后将其写入文件中。我会在没有字符串的情况下这样做但我需要所有寄存器写入文件,所以我不能一字母写。

编辑:我需要知道的是如何在每个字母被挑选后加入。例如,Base是空的,然后在拾取一个字母后,它会被抛入其中,但是在循环再次运行之后,将会选择另一个字母,并且我需要在完成所有操作后将其添加到base。

0 个答案:

没有答案