call的功能是到标号处执行指令, 具体操作分两步
1,sp-2
2,ip+(标号处地址-call指令后第一字节地址)
ret的功能是用栈中数据修改ip的值,操作步骤:
1,pop ip, 弹出当前ip
2,sp+2
有此课件, ret和call实现相反的作用, 这样做个实验
验证一下:
D:\ASM>type 101.asm
assume cs:code
stack segment
db 16 dup (0)
stack ends
code segment
mov ah,4ch ;【6】
int 21h
start: mov ax,stack
mov ss,ax
mov sp,10h
mov ax,0
mov dx,0
call s ;【1】将ip入栈,执行S处指令
mov dx,bx ;【4】
jmp ax ;【5】
s: mov bx,1234 ;【2】
ret ;【3】将ip出栈, 执行call下面指令
code ends
end start
执行顺序如上
- [regex] O(∩_∩)O哈哈~ 02/05 18:44
- [qiangzi] 可爱 02/04 21:26
- [游客] revcp:逆序复制的意思 因为执行完d2c之后, 数字都是倒序排列的, 所以得rev一下 02/02 13:28
- [regex] 那个loo用的不对!应改为jmp short 比较好 01/30 15:24
- [regex] 三个实验踉踉跄跄磕磕绊绊的搞出来啦, 虽然不太精彩, 可是毕竟是自己的心血。 通过这个三个实验, 01/30 12:32
- [游客] 程序多用他们配合时间模块化编程,也就是子程序。 01/25 14:20
- [regex] 嘿嘿~~~, 初学者,不知道写啥 O(∩_∩)O哈哈~ 01/15 15:54
- [abob] 博客好干净啊 ^_^ 01/05 11:15
[ 游客 发表于 2010-01-25 14:20 ]
程序多用他们配合时间模块化编程,也就是子程序。