Assembly 非法内存引用

Assembly 非法内存引用,assembly,x86,x86-16,cpu-registers,addressing-mode,Assembly,X86,X86 16,Cpu Registers,Addressing Mode,我是汇编语言的初学者 正在尝试实现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

我是汇编语言的初学者
正在尝试实现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]
但不起作用

asm x86中不允许这种操作。不能将数据直接从一个存储单元移动到另一个存储单元。为此,您需要进行登记,例如:

mov al, byte ptr[di]
mov byte ptr[si], al

asm x86中不允许此类操作。不能将数据直接从一个存储单元移动到另一个存储单元。为此,您需要进行登记,例如:

mov al, byte ptr[di]
mov byte ptr[si], al

正如icepack所指出的,您所拥有的不是有效的指令


检查
movs
指令,该指令将字节从[si]移动到[di],并同时递增两个索引计数器。

正如icepack指出的那样,这里的指令无效


不过,请查看
movs
指令,该指令将字节从[si]移动到[di],并同时递增两个索引计数器。

Ouch。。忘记[Si]和[Di]是内存位置..:)哎哟。。忘记[Si]和[Di]是内存位置..:(谢谢你:)