汇编语言笔记6
汇编语言笔记6
课本第9、第10章
转移指令的原理
可以修改IP,或同时修改CS和IP的指令统称转移指令。有以下几类:
- 只修改IP时,称段内转移,如 jmp ax
- 同时修改CS和IP,称段间转移。如 jmp 1000:0
段内转移又分为:短转移(-128——127)【CPU在执行短转移的时候只需知道位移,不需知道地址】、近转移(-32768——32767)
8086CPU的转移指令分为:
- 无条件转移指令(jmp)
- 条件转移指令
- 循环指令
- 过程
- 中断
操作符offset
操作符offset用于获取标号处的偏移地址
1 | codesg segment |
jmp指令
jmp指令为无条件转移指令,可以只修改IP,也可以同时修改CS和IP
1 | jmp short ptr 标号 ;段内短转移 |
jcxz指令
所有的条件转移指令都是短转移
jcxz 标号 :如果cx的值为0,则跳转到标号处执行
loop指令
所有的循环指令都是短转移,如果cx不等于0,则执行标号处
loop指令工作原理:
1 | cx-- |
CALL和RET指令
ret和retf
- ret利用栈中的数据,修改IP的内容,实现近转移
- retf利用栈中的数据,修改CS和IP的内容,实现远转移
ret指令:
1 | IP = SS*16+SP |
retf指令:
1 | IP = SS*16+SP |
call指令
call 标号
执行call指令时,先将当前的IP**(call指令的下一行代码的偏移地址)**压栈,然后跳转到标号处执行。
1 | SP = SP-2 |
call far ptr 标号:实现的是段间转移。
1 | SP = SP-2 |
1 | call word ptr 内存单元地址 ;用内存单元地址的数据修改IP |
call和ret配合使用,可以实现子程序的编程
mul指令
mul,乘法指令:
- 两个相乘的数,要么都是8位,要么都是16位
- 如果两个数都是8位,那么一个默认放在AL中,另一个在8位寄存器或者内存字节单元中。结果存在AX中
- 如果两个数都是16位,那么一个默认在AX中,另一个在16位寄存器或者内存字单元中。结果的高位在DX中,低位在AX中
1 | mul 寄存器 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星辰微光的博客!





