<加深转移指令原理的理解>
assume cs:codesg
codesg segment
mov ax,4c00h
int 21h
start:
mov ax,0
s: //cs:0008h
nop
nop
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
s0:
jmp short s
s1: //cs:0018h
mov ax,0
int 21h
mov ax,0
s2: //cs:0020h
jmp short s1
nop
codesg ends
end start
程序可以正确返回;第10到13行是将s2标号的机器码(如EBF6,F6:十进制表示-10)复制到s标号的两个字节中;
当转到s:处时,机器指令为EBF6(补码表示),当执行机器指令时,ip=0010h,则转移的标号地址为F6H+10H=0,即
翻译出的汇编指令为:jmp short 0000h;执行mov ax,4c00h,int 21h;程序即可正确返回;