0

私は
STRCPYを実装しようとしているアセンブリ言語の初心者です。
私のアセンブラ「TASM」は「不正なメモリ参照」エラーを返します。エラーについて読み込もうとしましたが、何も見つかりませんでした。

これがmaコードです。

include inout.asm
.Model Small,c
.486
.STACK 200h
.DATA
    Arr1 DB "ABCD$"
    Arr2 DB "EFGHIJ$"
.CODE
StART: MOV AX, @DATA
       MOV DS, AX

      LEA Si,Arr1
      LEA Di,Arr2

again:  cmp Byte PTR [Si], "$"
        JNE Ite ; Iterate
        JMP Done
         Ite: MOV Byte PTR[ Di ],[Si] ; Error Here
         Inc Si ; One Byte though
         Inc Di ; One Byte though
         JMP again
Done: MOV Byte PTR [Di], "$"
      call puts, offset Arr2
      Call puts, offset Arr1
 MOV AH,04CH
 MOV AL,0
 INT 21h
 END START

これがアセンブラーの言うことです。

C:\TASM\BIN>tasm /zi /z third
Turbo Assembler  Version 3.1  Copyright (c) 1988, 1992 Borland International

Assembling file:   third.ASM
                 Ite: MOV Byte PTR[ Di ],[Si] ; Error Here
**Error** third.ASM(18) Illegal memory reference
Error messages:    1
Warning messages:  None
Passes:            1
Remaining memory:  415k

ところで私は試しました

MOV Byte PTR[DI],BYTE PT[SI]しかし、動作しませんでした

4

2 に答える 2

2

このような操作は、asmx86では許可されていません。あるメモリセルから別のメモリセルにデータを直接移動することはできません。これを行うには、レジスターを通過する必要があります。例:

mov al, byte ptr[di]
mov byte ptr[si], al
于 2013-03-12T18:01:08.953 に答える
2

アイスパックが指摘しているように、あなたが持っているものは有効な指示ではありません。

ただし、命令を確認してmovsください。これにより、バイトが[si]から[di]に移動し、両方のインデックスカウンターもインクリメントされます。

于 2013-03-12T18:02:49.277 に答える