汇编语言学习笔记10

时间:2022-05-26 01:18:19
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中所以就执行了第一条代码,程序就结束了。
汇编语言学习笔记10
        再来认识一下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
这样有了这两个指令的配合我们就可以进行模块化程序的设计了,。。额今天的作业终于做完了。。悠悠。。