2015-11-03 52 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 
相关问题