博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[汇编语言]-第十章 ret,retf,call指令
阅读量:5278 次
发布时间:2019-06-14

本文共 1762 字,大约阅读时间需要 5 分钟。

1- ret 相当于 pop IP;用栈中数据,修改IP内容.从而实现近转移.

执行后(IP)=0, CS:IP指向代码段的第一条指令.

1 assume cs:code 2 stack segment 3     db 16 dup(0) 4 stack ends 5 code segment 6     mov ax,4c00h 7     int 21h 8 start: 9     mov ax,stack10     mov ss,ax11     mov sp,1612     mov ax,013     push ax14     mov bx,015     ret16 code ends17 end start

 

2- retf 相当于 pop IP; pop CS;用栈中数据修改CS,IP内容.从而实现远转移.

执行后 CS:IP指向代码段的第一条指令.

1 assume cs:code 2 stack segment 3     db 16 dup(0) 4 stack ends 5 code segment 6     mov ax,4c00h 7     int 21 8 start: 9     mov ax,stack10     mov ss,ax11     mov    sp,1612     mov ax,013     push cs14     push ax15     retf16 code ends17 end start

reference:

http://bbs.csdn.net/topics/340237304

 

3- 实现从内存1000:0000处开始执行指令

1 assume cs:code 2 stack segment 3     db 16 dup(0) 4 stack ends 5 code segment 6     mov ax,4c00h 7     int 21 8 start: 9     mov ax,stack10     mov ss,ax11     mov    sp,1612     mov ax,1000H13     push ax14         mov ax,015     push ax16     retf17 code ends18 end start

 

4- call 标号 (将当前的IP压栈后,转到标号处执行指令)

push Ip

jmp near ptr 标号

1 assume cs:code 2 code segment 3 start: 4     mov ax,0 5     call s 6     inc ax 7 s: 8     pop ax 9 code ends10 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

 

 

转载于:https://www.cnblogs.com/galoishelley/p/3788306.html

你可能感兴趣的文章
opencv学习之路(37)、运动物体检测(二)
查看>>
Maven知识整理
查看>>
C# 按位或,按位与, 按位异或
查看>>
洛谷P3628 [APIO2010]特别行动队 斜率优化
查看>>
SDUT2165:Crack Mathmen(快速幂)
查看>>
python爬虫学习笔记-网络爬虫的三种数据解析方式
查看>>
cygwin的使用
查看>>
NSTextField/NSTextView中显示超链接以及NSMutableAttributedString用法
查看>>
开始 Sencha Touch 2 之旅之一
查看>>
MVVM 模式下iOS项目目录结构详细说明
查看>>
创意,创新,创造
查看>>
零基础ASP.NET Core MVC插件式开发
查看>>
HashedWheelTimer 原理
查看>>
关于myeclipse部署后classes文件夹为空的问题
查看>>
View PDF Online In Java Web
查看>>
AndroidStudio Gradle项目中添加.so文件
查看>>
用delphi+Apache 开发动态网站(二)
查看>>
团队博客PM
查看>>
服务器
查看>>
point-position目标定位
查看>>