关于王爽汇编书中实验8 一个奇怪的程序

assume cs:code

code segment
        mov ax, 4c00h
        int 21h
start: 
        mov ax, 0
    s: nop
        nop
        mov di, offset s
        mov si, offset s2
        mov ax, cs:[si]
        mov cs:[di], ax
    s0: jmp short s
    
    s1: mov ax, 0
        int 21h
        mov ax, 0
    s2: jmp short s1
        nop
code ends
View Code

本质问题说的是jmp指令被编译为机器码后,机器码是 EB,后面的数据是 IP 寄存器 将要加、减的值。

代码中第一次跳转是上图中的 红圈1, EBF0被读取后, IP寄存器指向的是 076A:0018这个地址,即【IP】=18H,  EBF0执行后,IP=【IP】-10H,跳转到 红圈3 处,此处两个NOP点位的两个字节此时被换为了 红圈2 处的机器码 EBF6, 加载 EBF6后,IP指向076a:000A处,即 【IP】=0AH   执行EBF0后, IP=【IP】- 0AH,即指向了076A:0000处理,代码继续执行。

这段代码表明:

1、JMP指令被编译为机器指令后,【跳转值】就已经已经确定了。

2、JMP指令影响IP寄存器的值。

原文地址:https://www.cnblogs.com/Jiaojiawang/p/14352384.html