关于读书笔记:王爽汇编语言第4版读书笔记第910章
写这个系列文章的次要目标是记录书中重要的知识点,并和大家分享一些集体了解与实际。因为笔记中的知识点比拟零散,而书中零碎的介绍了一个 x86-16 处理器在实模式下的工作原理以及如何应用汇编语言与其进行“沟通”,所以举荐想要零碎学习的敌人们去学习这本书。当咱们把握了实模式的工作原理之后,就能够进一步钻研起初呈现的其余运行模式(如保护模式)。除此之外,相熟汇编语言有助于咱们把握下层语言(如 C)的执行原理,因为它们都要对汇编(机器码)进行形象,而汇编程序就是基于 CPU 的执行机理写进去的。 第九章转移行为分类段内转移(只批改 IP, 依据转移的范畴不同又分为:短转移 和 近转移)段间转移(同时批改 CS 和 IP)jmp 指令的两种实现差别在个别的汇编指令中,立刻数不管示意一个数据还是内存单元的偏移地址,都会在对应的机器指令中呈现。基于转移的间隔——指令中不蕴含目标地址,而蕴含的是位移量(向前或向后挪动的间隔) 长处,可浮动拆卸,即位移量不变的状况下,这段程序可在任何中央执行基于要转移的目标地址以上两个维度的汇总 基于转移的间隔(间接转移)基于要转移的目标地址(间接转移)段内转移jmp short Labeljmp Label、jmp near ptr Labeljmp 某一非法16位寄存器——将寄存器中的内容写入 IPjmp word ptr 地址——转移到目标偏移地址段间转移 jmp far ptr Label(注:它也可能实现段内转移的成果)jmp dword ptr 地址(h_word=段地址,l_word=目标偏移地址)jmp short Label: 翻译成的机器码为 EB??H , ?? 代表 8 位的位移量(这种形式是短转移) 实质为:IP = IP + 8位的位移量 【重点(容易被疏忽):CPU 在执行该指令时,是应用这个位移量来计算 IP 的】- short 指明此处的位移为 8 位位移,范畴是 -128~127, 用【补码】示意- 8位的位移量 = 标号处的地址 - jmp指令后的第一个字节的地址,编译器在【编译时】算出为什么是 jmp 指令后的第一个字节的地址aj?为什么这么设计呢?因为取址之后(执行之前)IP寄存器中的地址会被设置为该地址aj,这样在执行转移指令时,能够直接参与目标偏移地址的计算! 编译时:disp=as-aj, 执行指令时:IP(as) = IP(aj) + disp(位移量) 即间接实现该指令的性能jmp near ptr Label(近转移,实质与短转移雷同,区别仅仅是它反对16位的位移量)jmp far ptr Label(远转移) ...