[汇编语言]-第十章 ret,retf,call指令
1- ret 相当于 pop IP;用栈中数据,修改IP内容.从而实现近转移.
执行后(IP)=0, CS:IP指向代码段的第一条指令.
assume cs:code
stack segment
db dup()
stack ends
code segment
mov ax,4c00h
int 21h
start:
mov ax,stack
mov ss,ax
mov sp,
mov ax,
push ax
mov bx,
ret
code ends
end start
2- retf 相当于 pop IP; pop CS;用栈中数据修改CS,IP内容.从而实现远转移.
执行后 CS:IP指向代码段的第一条指令.
assume cs:code
stack segment
db dup()
stack ends
code segment
mov ax,4c00h
int
start:
mov ax,stack
mov ss,ax
mov sp,
mov ax,
push cs
push ax
retf
code ends
end start
reference:
http://bbs.csdn.net/topics/340237304
3- 实现从内存1000:0000处开始执行指令
assume cs:code
stack segment
db dup()
stack ends
code segment
mov ax,4c00h
int
start:
mov ax,stack
mov ss,ax
mov sp,
mov ax,1000H
push ax
mov ax,
push ax
retf
code ends
end start
4- call 标号 (将当前的IP压栈后,转到标号处执行指令)
push Ip
jmp near ptr 标号

assume cs:code
code segment
start:
mov ax,
call s
inc ax
s:
pop ax
code ends
end start
ax=6
CPU指令执行的过程:
1- 从CS:IP指向的内存单元读取指令,读取的指令,进入指令缓冲器.
2- (IP) = (IP) + 所读取的指令长度, 从而指向下一条指令
3- 执行指令, 转到1, 重复这个过程
5- call far ptr 标号
push cs
push ip
jmp far ptr 标号


执行步骤分析:
CS:1000 IP:3 时 读取call far ptr s放入缓存, ip = IP + 5 = 8
push cs //1000
push ip //8
跳转到s执行
pop ax //ax = 8
add ax,ax // ax = 8 + 8 = 10 寄存器中存放的数为16进制
pop bx //bx = 1000
add ax,bx //ax = 1000 + 10 = 1010
最终结果 ax = 1010
6- call 16位寄存器
push IP
jmp 16位寄存器 // mov IP,16位寄存器; jmp IP

ax=000B
sp是栈顶地址,[bp]栈顶值为5
ax = 6 + 5 = B
reference:
http://bbs.csdn.net/topics/100016651
[汇编语言]-第十章 ret,retf,call指令的更多相关文章
- 汇编语言---call和ret指令
汇编语言--call和ret指令 call和ret指令 call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP. 它们经常被共同用来实现子程序的设计. ret和retf ret指令用栈 ...
- 高特权级代码段转向低特权级代码段(利用 ret(retf) 指令实现 jmp from ring0 to ring3)
[0]写在前面 0.1)本代码旨在演示 从 ring0 转移到 ring3(即,从高特权级 转移到 低特权级) 0.2)本文 只对 与 门相关的 代码进行简要注释,言简意赅: 0.3)文末的个人总结是 ...
- 【转】ret,retf,iret的区别
ret RET, and its exact synonym RETN, pop IP or EIP from the stack and transfer control to the new ad ...
- Linux 之 AT&T汇编语言 mov、add、sub指令、数据段
mov指令的几种形式: mov 寄存器. 数据 mov ax,8888 mov 寄存器. 寄存器 mov bx,ax mov 寄存器. 内存单元 mov ax,[0] mov 内存单元.寄存器 mov ...
- 汇编语言学习笔记(十二)-浮点指令----ACM
http://blog.csdn.net/q_l_s/article/details/54909328
- [汇编学习笔记][第十章 CALL和RET指令]
第十章 CALL和RET指令 call和ret指令都是转移指令,它们都修改CS和IP.经常被共同用于实现子程序的设计.这一章,我们讲解call和ret指令的原理 10.1 ret和retf ret指令 ...
- 汇编-10.0-CALL和RET指令
call和ret指令都是转移指令,他们都是修改IP,或同时修改CS和IP.它们常被共同用来实现子程序设计. 1.ret和retf ret指令用栈中的数据,修改IP的内容,从而实现近转移: retf指令 ...
- 汇编指令之JMP,CALL,RET(修改EIP的值!!!)
简单介绍了,JMP指令按市面上的意思来说是跳转到指定地址,但我这里不这么说,JMP, CALL, RET三个指令均为修改EIP值的指令,EAX, ECX, EBX, EDX, ESP, EBP, ES ...
- ASM:《X86汇编语言-从实模式到保护模式》第8章:实模式下硬盘的访问,程序重定位和加载
第八章是一个非常重要的章节,讲述的是实模式下对硬件的访问(这一节主要讲的是硬盘),还有用户程序重定位的问题.现在整理出来刚好能和保护模式下的用户程序定位作一个对比. ★PART1:用户程序的重 ...
随机推荐
- Halloween party
https://www.hackerrank.com/challenges/halloween-party def main(): t = int(raw_input()) for _ in rang ...
- java生产者消费者并发协作
随着职务转变,代码荒废很久了,很多时间都是在沟通需求,作为一名技术员,不写代码就感觉是在自废武功,慢慢颓废了很多,今天重新回顾了下JAVA线程知识,基础知识就不梳理了,网上也很多,主要关键几个状态位( ...
- IOS 面试 --- 网络部分
网络部分 3 做过的项目是否涉及网络访问功能,使用什么对象完成网络功能? 答案:ASIHTTPRequest与NSURLConnection 4 简单介绍下NSURLConnection类及+ sen ...
- android核心分析--转
http://blog.csdn.net/column/details/androidcore.html http://simon-fu.vicp.cc/?p=999 http://www.uml.o ...
- Win8/Win8.1都有哪些版本?我该选择哪个?(二)
Windows版本分类比较复杂,下文主要为大家理清Win8/Win8.1的版本种类.如果想了解更多,可以结合<Win7/Win8/Win8.1众多版本,我该选择哪个?>一文来了解. 细数W ...
- 《Programming WPF》翻译 第9章 2.选择一个基类
原文:<Programming WPF>翻译 第9章 2.选择一个基类 WPF提供了很多类,当创建一个自定义元素时,你可以从这些类中派生.图9-1显示了一组可能作为类--可能是合适的基类, ...
- 错误:指定的任务可执行文件位置 D:\Android\platform-tools\aapt.exe 无效
android-apt-compiler: Cannot run program "D:\android-sdk\platform-tools\aapt 装上IntelliJ IDEA /下 ...
- 编译型/解释型语言,什么时候用shell
编译型语言 很多传统的程序设计语言,例如Fortran.Ada.Pascal.C.C++和Java,都是编译型语言.这类语言需要预先将我们写好的源代码(source code)转换成目标代码(obje ...
- JSTL核心标签库学习笔记
写的很简单,不一定会有用,如果想要详细的话,建议看API啊--- 不过在这里推荐一个地址,http://www.yiibai.com/jstl/ 希望对你们有帮助啊,很好的教材啊 1.<c:i ...
- pyqt labe界面超级链接例子学习
def bz(self): self.lable1=QtGui.QLabel(u'<br><a href=http://windows.microsoft.com/zh-cn/win ...