汇编 RET 和 CALL

https://blog.csdn.net/u013018721/article/details/51264199

1.我们先来实践一下 ret 指令

DATA SEGMENT

A DB 12H

B DB 23H

DATA ENDS

 

STACK SEGMENT

STACK ENDS

 

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:

MOV AX,DATA

MOV DS,AX

 

MOV BX,8888H

PUSH BX

RET

 

MOV AH,4CH

INT 21H

 

CODE ENDS

END START

可以看到 ret 指令实际就是执行push IP的操作,即将当前栈顶的值赋值给ip

2.我们再来看看 call 指令的实际意义

DATA SEGMENT

A DB 12H

B DB 23H

DATA ENDS

 

STACK SEGMENT

STACK ENDS

 

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:

MOV AX,DATA

MOV DS,AX

 

MOV AX,0

INC AX

 

MOV BX,0000H

CALL NEXT

INC AX

INC AX

NEXT:

INC AX

INC AX

POP BX

 

 

MOV AH,4CH

INT 21H

 

CODE ENDS

END START

可以看出 call 执行的其实就是 jmp xxx 和 push IP 的操作

 

 

posted @ 2019-02-28 09:07  IT蓝月  阅读(138)  评论(0编辑  收藏  举报
Live2D