假设我有一串ascii字符,例如“652 + 346 * 779 =”,我想将一些字符从这个变量移到另一个变量......
Buffer是字符串(在本例中为“652 + 346 * 779 =”) lengthofnum是有问题的数字的长度(在这种情况下346长度为3) A_ascii是我正在尝试传输字符串“346”的变量。
我有一个根本不起作用的循环,我无法弄清楚我应该使用什么寻址模式。 emu8086讨厌到目前为止我尝试过的所有内容,并且使用MOV指令给出了关于语法的错误
mov cx,lengthofnum
dumploop1:
mov bx, offset buffer
;dump the number from buffer into A_ascii
mov A_ascii[cx],[bx]+cx
loop dumploop1:
我收到以下错误代码:
(672) wrong parameters: MOV A_ascii[cx],[bx]+cx
(672) probably it's an undefined var: A_ascii[cx]
答案 0 :(得分:6)
与(显然)流行的看法相反,你可以在x86上进行直接的mem-> mem移动,而不会(明确地)移动到/来自寄存器。由于您已经拥有CX的长度,因此您已经开始朝着正确的方向前进:
mov si, offset A_ascii
mov di, offset B_ascii
rep movsb ; automatically uses length from CX
答案 1 :(得分:1)
你不能直接在两个指针之间移动。您需要将其移动到寄存器中以进行临时存储:
mov dx, [bx+cx]
mov [A_ascii+cx], dx
如果你想要移动两块内存,通常的方法是这样的:
xor cx, cx ; set counter = 0
mov ax, addressOfSource ; load base addresses
mov bx, addressOfDest
move_loop:
mov dx, [ax+cx] ; load 2 bytes of data from source
mov [bx+cx], dx ; move data into dest
add cx, 2 ; increment counter
cmp cx, dataLength ; loop while counter < length
jl move_loop