当前位置: 首页 > 汇编 > 正文

汇编学习(四)8086汇编拾遗 (3)

jcxz  指令:条件指令,所有的转移都是短转移,IP 的修改范围是-128~127 之间。

eg. 查找内存2000H段中的一个值为0的字节,然后将它的偏移地址存储在dx 中。

使用偏移量进行转移的意义:

方便程序段在内存中的浮动装配,也就是地址重定向的原理,链接过程的精髓,其实只是一个很简单的道理。

当编译器检测到位移超界后就会报错,这一点编译器可以做到。所以jmp 指令后的标号其实就是偏移量,带有符号位的偏移量。

关于一个绿色“hello world” 程序的小例子

2016-05-24 21:31:53 的屏幕截图

这仅仅是一个小例子,我们接着学习。

ret  指令:从栈中弹出一个值,修改IP 内容

retf 指令: 从栈中先弹出一个值IP ;然后弹出一个值CS。

call 指令 : 将下一条指令压栈,转移

关于call 的几种用法:

call 标号: 将下一条IP 压栈,然后转到标号处执行指令,call 也是一个转移偏移。

call far ptr 标号:实现的是段转移,实现过程,先压CS 再压IP进栈。跳转到标号去。

call reg    : 直接跳转寄存器的值。

call word ptr: 内存单元地址 ,相当于直接使用内存中的值修改IP。

call dword ptr 内存单元地址,相当于先压CS 再压IP 。

一个简单的函数小例子来自《汇编语言》

自此我们就可以尝试设计带有子程序的程序了。

mul 乘法指令:

参数注意:要么都是8位,要么都是16位,如果是8位,一个默认在AL,另一个在8位reg 和 内存中,如果是16位,一个默认在AX 中,另一个在16位reg 或内存单元中。

结果:如果是8位年默认在AX 中,如果是16位,结果高位默认在DX ,低位在AX。

 

 

本文固定链接: http://zmrlinux.com/2016/05/24/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%ef%bc%88%e5%9b%9b%ef%bc%898086%e6%b1%87%e7%bc%96%e6%8b%be%e9%81%97-3/ | Kernel & Me

该日志由 root 于2016年05月24日发表在 汇编 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 汇编学习(四)8086汇编拾遗 (3) | Kernel & Me