2014-02-06 51 views
0

我一直試圖在MASM中連接一個字符串,並且遇到了一些困難。首先,我在這一點的輸出是一個樹狀字符0,但我認爲也許我的WriteString(來自Irvine庫)沒有被正確使用。 WriteString是從edx還是eax寫的?我也知道在使用字符串時,我需要使用指向其第一個字符的地址的指針,而不是整個字符串;這是我正在嘗試使用緩衝區和OFFSET指針,但我不確定這是完全正確的。我也不確定推送和流行是否有必要,如果是,它究竟做了什麼。 請幫忙!首先十分感謝。在MASM中連接字符串

這裏是編碼,我已經寫了:

TITLE Str_Concat  (WA5.asm) 

; Program Description: This program concatenates a source string to a target string. 
; Author: 
; Date Created: 2/6/2013 


INCLUDE C:\IrvineExamplesVS2010a\Irvine32.inc 

.data 
    source BYTE "Rocks",0 
    target BYTE "Zachary",0 
    buffer BYTE 24 DUP (0) 

.code 
main PROC 
    push ds  
    pop es 

    mov esi, OFFSET source 
    mov edi, OFFSET target 
    cld       ;direction = forward 
    mov cx, LENGTHOF source 
    rep movsb 

    call WriteString 
    call crlf 


     exit  ; exit to operating system 
main ENDP 

END main 

回答

0

歐文解釋說,他的大部分程序在他的書。他的圖書館的來源也可以從他的網站下載。在源文件中,他留下了一些有關procs作爲參數的信息,在哪些寄存器中以及每個procs返回的信息。下面是從WriteString說明:

WriteString PROC 
; 
; Writes a null-terminated string to standard 
; output. Input parameter: EDX points to the 
; string. 
; Last update: 9/7/01 
;-------------------------------------------------------- 

所以,在閱讀,經過在什麼寄存器會你把target地址?不能使用edi「原樣」,因爲在edi原地址已經被rep movsb

加在一個側面說明,你是串聯的字符串,但在source字符串覆蓋在字符串中target。您定義了buffer,但從不使用它。 buffer是將兩個琴絃放在一起?如果是這樣,您需要將target複製到buffer,然後將source複製到buffer