2015-11-03 32 views
0

我試圖通過元素將elemenet移動到彙編語言中的另一個字符串中。問題是我在彙編時間不斷收到錯誤,如:「無法添加相關類型」。爲什麼會發生這種情況,我如何解決這個問題,以便我可以將STRING中的所有元素複製到STRING2中?將字符串元素移動到程序集中的另一個字符串中

DATA SEGMENT PARA PUBLIC 'DATA' 
STRING DB 1, 2, 3, 4 ; first string 
LENGTH DB $-STRING ; length of the first string 
ITERATOR DB 0 
DATA ENDS 
DATA SEGMENT PARA PUBLIC 'DATA' 
STRING2 DB 100 DUP (?) ; second string 
DATA ENDS 

CODE SEGMENT PARA PUBLIC 'CODE' 
START PROC FAR 
ASSUME CS:CODE, DS:DATA 
PUSH DS 
XOR AX, AX 
PUSH AX 
MOV AX,DATA 
MOV DS,AX 
MOV CL, LENGTH ; 
THELOOP: 
MOV ITERATOR, CL 
SUB ITERATOR, 1 
MOV STRING2[ITERATOR], STRING[ITERATOR] ; this is where the error appears 
LOOP THELOOP 

RET 
START ENDP 
CODE ENDS 
END START 

回答

2

這個表達式,STRING[ITERATOR]不能在英特爾彙編中表達。 您只能在指令中使用一個內存引用;其他任何東西都必須是註冊表。 此外,你不能移動存儲器到存儲器直接,但是使用了movs

push ds 
push es 
mov ax, DATA 
mov ds, ax 
mov es, ax 

mov si, offset STRING 
mov di, offset STRING2 
xor ch, ch 
mov cl, [LENGTH] 
rep movsb   ; movsb: move a byte from ds:si to es:di, and increment si and di 

pop es 
pop ds 

或者,更貼近您的解決方案,你必須存儲的值加載到寄存器,然後存儲它:

xor bx, bx 
    xor ch, ch # the loop instruction uses all of cx! 
THELOOP: 
    mov al, STRING[bx] 
    mov STRING2[bx], al 
    inc bx 
    loop THELOOP 
相關問題