2014-02-06 3 views
0

Я пытаюсь объединить строку в MASM, и у меня есть некоторые трудности. Прежде всего, мой вывод на этом этапе - это 0 с древовидным характером, но я думаю, что, возможно, мой WriteString (из библиотеки Irvine) не используется должным образом. WriteString написать письмо от edx или eax? Я также знаю, что при использовании строк мне нужно работать с указателями на адреса их первого символа, а не на всю строку; это то, что я пытаюсь сделать с буфером и указателями OFFSET, но я не уверен, что это абсолютно правильно. Я также не уверен, нужен ли push и pop, и если да, то что именно он делает. Пожалуйста, помогите! Большое спасибо заранее.Конкатенация строки в 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

На стороне записки, вы не конкатенации строк, но перезаписать строку в target со строкой в ​​source. Вы определили buffer, но никогда не используете его. buffer - держать обе строки вместе? Если это так, вам необходимо скопировать target в buffer, затем скопировать source в buffer.

Смежные вопросы