1

「652+346*779=」などの ASCII 文字の文字列があり、この変数から別の変数にいくつかの文字を移動したいとします...

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] 
4

2 に答える 2

6

(明らかに)一般的な信念に反して、レジスターとの間で(明示的に)移動することなく、x86上で直接mem->mem移動を実行できます。あなたはすでにCXの長さを持っているので、あなたはすでに正しい方向に始めています:

mov si, offset A_ascii
mov di, offset B_ascii
rep movsb    ; automatically uses length from CX
于 2011-11-27T21:37:17.130 に答える
1

2つのポインタ間を直接移動することはできません。一時ストレージ用にレジスタに移動する必要があります。

mov dx, [bx+cx]
mov [A_ascii+cx], dx

移動するメモリのブロックが2つある場合、通常の方法は次のようになります。

  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
于 2011-11-27T21:27:59.117 に答える