收藏 分享(赏)

call指令.doc

上传人:精品资料 文档编号:9213974 上传时间:2019-07-29 格式:DOC 页数:2 大小:41KB
下载 相关 举报
call指令.doc_第1页
第1页 / 共2页
call指令.doc_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

1、汇编:call 指令 1/2一、按位移,进行转移的 CALL 指令 格式: Call 标号指令执行解析:1、将当前(IP) ,即 call 指令下一条指令的 IP 压入栈。2、按位移,转到标号处执行。(相当于执行 push ip 后再执行 jmp near prt 标号)例:内存地址 机器码 汇编指令1000:0 b8 0000 mov ax,01000:3 e8 0100 call s ; 将当前(ip)=6 压入栈1000:6 40 inc ax1000:7 58 s:pop ax ;将栈顶数据弹出并给 ax,ax:=6二、转移地址在指令中的 call 指令(段间转移)格式: Call f

2、ar ptr 标号指令执行时解析: 1、将当前 CS 压入栈,再将当前 ip(call 下一条的)压入栈;2、跳转到标号所在的 CS:IP 执行(相当于执行 push cs push ip jmp far prt 标号)例:内存地址 机器码 汇编指令1000:0 b8 0000 mov ax,01000:3 9a 09 00 00 10 call far ptr s ;将 cs=1000 ,ip=8 压入栈,并跳至 EA=09处1000:8 40 inc ax 1000:9 58 s: pop ax ;ax:=08h Add ax,ax ;ax:=10hPop bx ; bx:=1000hAd

3、d bx,ax ax:=1010h 三、转移指令在寄存器中的 call 指令格式: call 16 位寄存器 (注意是 16 位)指令执行时解析:1、将当前 IP(call 指令下一条)压入栈,2、当前 Ip 修改为,IP:=16 位寄存器值例:内存地址 机器码 汇编指令1000:0 b8 06 00 mov ax,6 ; ax:=61000:3 ff d0 call ax ; 1、将当前 IP:=5 压入栈1000:5 40 inc ax 1000:6 mov bp ,sp ;将 bp:=spAdd ax,bp ; ax:=ax+ ss:bp=6+5=0Bh四、转移地址在内存中的 call

4、指令分两种:格式 1、call word ptr 内存单元地址指令执行解析:1、将当前 IP(call 指令下一条)压入栈2、用内存单元地址的值,修改掉当前 IP 的值例:mov sp,10hMov ax,0123hMov ds:0,ax ;ax:=0123hCall word prt ds:0 ;1、用 ds:0单元值给 ip,ip:=0123h; ; 2、sp 等于入栈后-2 sp:=10h-2=0eh 汇编:call 指令 2/2格式 2、call dword ptr 内存单元地址指令执行解析:1、将当前的 CS 先入栈,然后 ip 入栈2、将内存单元所在的 CS:=高字, IP:=低字

5、,修改后,形成新 cs:ip例:mov sp,10hMov ax,0123hMov ds:0,axMov word ptr ds:2,0 ;ds:2内存单元值为 00 00 ,一个字的值Call dword ptr ds:0 ; 连续入栈双字,sp:=sp-4=10h-04h=0ch指令执行后:CS 等于 ds:0高字,ip 等于 ds:0的低字,ds:0的值是 23 01 00 00,所以 cs:=0h,ip:=0123h;Call 和 ret 指令配合使用实现子程序机制Assume cs:codeStart:Mov ax,1Mov cx,3Call sMov bx,axMov ax,4c00hInt 21hS:add ax,ax ;循环段为子程序Loop sref ; 循环结后后,ref 出栈数据修改 cs:ip 指向,返回 call 下条指令执行 Code segmentCode endsEnd start

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报