zoukankan      html  css  js  c++  java
  • 关于王爽汇编书中实验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寄存器的值。

  • 相关阅读:
    洛谷P3157 [CQOI2011]动态逆序对
    CDQ分治
    快速数论变换(NTT)
    洛谷P3338 [ZJOI2014]力
    洛谷 P1919 A*B Problem升级版
    0-1分数规划
    洛谷P4593 [TJOI2018]教科书般的亵渎
    拉格朗日插值
    20180912-3 词频统计
    20190912-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/Jiaojiawang/p/14352384.html
Copyright © 2011-2022 走看看