jmp指令【原理详解 8086汇编语言+笔记】 | 您所在的位置:网站首页 › 汇编语言中call的用法 › jmp指令【原理详解 8086汇编语言+笔记】 |
笔记目录
jmp指令原理详解篇(无条件转移指令)1 初步理解2 jmp指令格式(小总结)3 jmp指令本质-详解3.1 引子3.2 jmp short 标号(jmp short s为例) 怎么转移指令的?
4 总结
jmp指令原理详解篇(无条件转移指令)
1 初步理解
在8086汇编中,cpu要执行指令之前必须先取指(把指令从内存传输到cpu中),从而必须要给出指令所在内存单元的物理地址,寄存器cs:ip就是这个物理地址所对应的段地址和偏移地址(段地址16+偏移地址=物理地址*),而jmp指令就是用来修改ip或者cs和ip的内容,使cpu执行jmp所指向的那条指令(发生跳转/转移),不会执行原定顺序的下一条指令。所以jmp指令要给出两个信息,如下: jmp指令要给出两种信息: 1.转移的目的地址2.转移的距离/偏移地址(距离不同转移的类型不同) 段间转移(远转移):同时修改cs和ip段内短转移:jmp short 标号 ;只修改ip的值,ip的修改范围为-128~127(负数跳转方向是jmp指令之前,否则是之后),8位的位移段内近转移:jmp near ptr 标号 ;只修改ip的值,ip的修改范围为-32768~32767,16位的位移例如: 备注:在源程序中,不能直接使用“jmp 2000:0100"这样的转移指令来实现段间转移,这种方式在debug模式中使用的汇编指令,在源程序中写,编译器并不识别(编译报错) 3 jmp指令本质-详解 3.1 引子我们使用debug模式进行观察可以了解,常见指令中的立即数在机器指令中有所体现,意思是像mov ax,0123、mov ax,[123]、push [0123]这样使用立即数的指令,其编译后的机器码中带有立即数,如下(debug模式中) 源代码: assume cs:codesg codesg segment start: mov ax,0 jmp short s ;执行完jmp后程序从inc ax处开始执行 add ax,1 ;不被执行 S: inc ax mov ax,4c00h int 21h codesg ends end startdebug模式下的机器码: (备注:上面记录的是段内短转移(cs未变),jmp的其他类型转移都大同小异,修改ip或者cs:ip的值) 4 总结偷个懒…就先这样~哈【尴尬】。 8086汇编环境资源免费获取【DOSBox】 链接:https://pan.baidu.com/s/1aRv4k6DVlJtGkHQDB6WjrA 提取码:8086 |
CopyRight 2018-2019 实验室设备网 版权所有 |