在MASM中连接字符串

时间:2014-02-06 22:02:09

标签: assembly masm irvine32

我一直在尝试连接MASM中的字符串并遇到一些困难。首先,此时我的输出为0,具有类似树状的字符,但我想也许我的WriteString(来自Irvine库)没有被正确使用。 WriteString是来自edx还是eax? 我也知道在使用字符串时,我需要使用指向第一个字符的地址而不是整个字符串的指针;这是我试图用缓冲区和OFFSET指针做的,但我不确定这是完全正确的。我也不确定推送和弹出是否必要,如果是,它到底是做什么的。 请帮忙!非常感谢提前。

这是我写的编码:

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

1 个答案:

答案 0 :(得分:0)

Irvine在他的书中解释了他的大多数程序。他的图书馆的来源也可以从他的网站下载。在源代码中,他留下了一些关于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

在旁注中,您连接字符串,但用target中的字符串覆盖source中的字符串。您定义了buffer,但从未使用它。 buffer是将两个字符串放在一起吗?如果是,则需要将target复制到buffer,然后将source复制到buffer