汇编语言学习笔记10

call和ret指令
call和ret指令都能修改ip,都是转移指令,这两个指令配合使用来进行调用小程序。
         ret指令用栈中的数据修改ip的内容,从而实现近转移,而retf指令用栈中的数据来修改 cs 和ip从而实现远转移,  cpu执行ret指令时相当于执行    ip=((ss)*16+(sp)) sp=sp+2;   cpu执行retf指令的时候就相当于执行 ip=((ss)*16+(sp))   sp=sp+2
   cs=ss*16+sp  sp=sp+2    若使用汇编指令来进行解释就是如下操作     ret   pop  ip       retf     pop  ip    pop cs  
下面的程序ret指令执行后,ip=0,cs:ip指向第一条指令   
assume cs:code 
stack segment
db 16 dup(0)
stack ends
code segment
mov ax,4c00h
int 21h
start: mov ax,stack 
mov ss,ax
mov sp,10h
mov ax,0
push ax
mov bx,0
ret
code ends
end start
呵呵此时执行ret  就相当于执行了pop ip,所以就把0给了ip  而此时又是在cs中所以就执行了第一条代码,程序就结束了。

        再来认识一下call指令  
     call 标号(将ip内的信息压入栈,然后转而去执行标号处的程序)用汇编代码解释为  push ip  jmp  标号
     这样我们可以根据call指令转移的远近来进行和ret或retf指令配合来进行子程序的调用了,举例如下。。
assume cs:code ,ss:stack
stack segment
db 16 dup(?)
stack ends
code segment
start: MOV ax,stack
MOV ss,ax
MOV sp,16
MOV cx,3
MOV ax,1
call s
MOV bx,ax
MOV ax,4c00h
int 21h
s: ADD ax,ax
loop s
RET 
code ends
END start
请读者 确定 bx中的内容。。。
其实bx里边存了8截图如下

这样有了这两个指令的配合我们就可以进行模块化程序的设计了,。。额今天的作业终于做完了。。悠悠。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值