assume cs:code
code segment
mov ax,code
mov ds,ax
mov bx,0
mov ax,20H
mov es,ax
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end
我们知道 cx初始化时存放的代码段长度,这个长度包含了 开始一直到 int 21的长度
所以 我上面的程序理论上可以实现 代码段完全copy到从 20:0 开始的段中
但是实际情况下 每次copy到 loop s后 后面的代码就无法copy了 但是我用debug loops逐条跟踪的时候发现指令是在执行的,每次loop cx都是固定的-1 而且我特也抄写了 所有的代码
发现 执行loop s时 所显示的 20:15~19代码为 b8 00 4c cd 21
但是实际情况下 为cc 00 4c cd 21 那么为什么 mov ax 4c00H和 int 21这两条指令没有被copy呢?
或者说 mov ax,4c00h 这条指令的代码为何变成了 cc 00 4c? |