我是汇编语言的初学者
试图实施STRCPY
我的汇编程序“TASM”返回“非法内存参考”错误..并尝试阅读有关错误但无法找到任何内容。
这是马代码。
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
这是Assembler所说的......
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
btw我试过
MOV Byte PTR[DI],BYTE PT[SI]
但无效
答案 0 :(得分:2)
正如icepack指出的那样,你所拥有的不是有效的指令。
然后检查movs
指令,它会将字节从[si]移动到[di]并同时递增两个索引计数器。
答案 1 :(得分:1)
asm x86中不允许执行此类操作。您无法将数据直接从一个存储单元移动到另一个存储单元。为此,您需要通过一个寄存器,例如:
mov al, byte ptr[di]
mov byte ptr[si], al