将字符串元素移动到程序集中的另一个字符串中
问题描述:
我试图通过元素将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
答
这个表达式,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