NUM EQU 3
.MODEL small
.STACK
.DATA
tempi DW 8,27,17,12,21,34,9,41,7,18,15,5
risultato DW NUM DUP (?)
.CODE
.STARTUP
PUSH OFFSET tempi
PUSH OFFSET risultato
CALL copiaVettore
ADD SP,4
MOV CX, 0
MOV CX,12
LEA BX, risultato
salta:
MOV DX, [BX]
ADD DX, 30h
ADD BX, 2
MOV AH, 2h
INT 21h
LOOP salta
.EXIT
copiaVettore PROC
PUSH BP
MOV BP, SP
PUSH DI
PUSH SI
MOV DI, [BP+4] ;risultato
MOV SI, [BP+6] ;sorgente
MOV CX, 12
ciclo1:
MOV AX, [SI]
MOV [DI], AX
ADD DI, 2
ADD SI, 2
LOOP ciclo1
POP SI
POP DI
POP BP
RET
copiaVettore ENDP
END
当过程RET
骨灰盒时,调试器在MOV CX, 12
跳过未知操作码:00 不是 8086 指令 - 尚不支持。
但是程序内部的MOV CX, 12
效果很好。
破坏的好例子。大多数人都删除了注册,你"破坏"了你的代码而不是:)
NUM EQU 3 ; <-- here's the problem
.MODEL small
.STACK
.DATA
tempi DW 8,27,17,12,21,34,9,41,7,18,15,5 ; 12 words source
risultato DW NUM DUP (?) ; but only 3 words data
由于您只有 3 个单词用于复制,因此以下 9 个单词将写入代码,从而破坏 RET 返回的代码
.CODE
.STARTUP
PUSH OFFSET tempi ; 3 bytes 12,0,21
PUSH OFFSET risultato ; 3 bytes 0,34,0
CALL copiaVettore ; 3 bytes 9,0,14
ADD SP,4 ; <-- this is where the RET will return,
MOV CX, 0 ; but starting from here the code
MOV CX,12 ; is overwritten with 0,7,0,18 ...
LEA BX, risultato
所以你期望的代码不再存在了。