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]是内存位置..:(谢谢你:)