我一直在尝试连接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
答案 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
。