RET在汇编语言中是个什么指令

RET在汇编语言中是个什么指令,第1张

RET指令是子程序的最后一条指令,即恢复断点,返回主程序

没有要求RET指令非要和哪一条指令要配对使用。

RET是子程序返回指令,放在子程序的结尾,当子程序执行完后,靠该指令返回主程序。

ret用栈的数据修改IP的内容,实现近转移。

ret执行步骤:

(1):(IP)=((SS)*16+SP)

(2):(SP)=(SP)+2

执行过程

ret指令用栈中的数据,修改IP的值,从而实现近转移。

CPU执行ret指令时,进行下面两步 *** 作:

(IP)=((SS)*16+(SP))

(SP)=(SP)+2

另一种用法ret n(n为整数)

等效于

(IP)=((SS)*16+(SP))

(SP)=(SP)+2

(SP)=(SP)+n

例如ret 4

pop ip

add sp,4

返回调用处

例:

push eax

call msgcall标号是把eip压入堆栈,然后再跳到标号msg处[标记1]

继续代码....

msg:

push 0

push 0

push eax

push 0

call dword ptr[MessageBoxA]

ret这是取出EIP,返回到调用处,继续执行[标记1]

扩展资料:

功能:

从堆栈中退出pc的高8位和低8位字节,把堆栈指针减2,从pc值处开始继续执行程序。不影响任何标志。

例子

主程序

MAIN:SETB P1.0(1)开始主程序,P1.0口置1(P1.0口输出为高,可以控制LED点亮)

LCALL DELAY(2)此时当前堆栈指针加2,调用(6)DELAY延时子程序

CLR P1.0(3)P1.0口清零(P1.0口输出为低,可以控制LED熄灭)

LCALL DELAY(4)此时当前堆栈指针加2,调用(6)DELAY延时子程序

LJMP MAIN(5)跳转到主程序,这样LED实现循环点亮

子程序

DELAY:MOV R7,#250(6)250--&gtR7

D1:MOV R6,#250(7)250---&gtR6

D2:DJNZ R6,D2(8)(R6-1),等于零执行下一条,不等于零,则跳转到D2

DJNZ R7,D1(9)(R7-1),等于零执行下一条,不等于零,则跳转到D1

RET(10)当前堆栈指针减2,返回到(3)CLR P1.0继续执行MAIN主程序。

END.(11)程序结束(伪指令)

参考资料:

百度百科——RET指令

百度百科——ret

汇编中ret的作用:

从堆栈中退出pc的高8位和低8位字节,把堆栈指针减2,从pc值处开始继续执行程序。不影响任何标志。

例子:

;主程序

MAIN:SETB P1.0 (1)开始主程序,P1.0口置1(P1.0 口输出为高,可以控制LED点亮)

LCALL DELAY (2)此时当前堆栈指针加2 ,调用(6)DELAY延时子程序

CLR P1.0 (3)P1.0口清零(P1.0 口输出为低,可以控制LED熄灭)

LCALL DELAY (4)此时当前堆栈指针加2 ,调用(6)DELAY延时子程序

LJMP MAIN (5)跳转到主程序,这样LED实现循环点亮

;子程序

DELAY:MOV R7,#250 (6)250-->R7

D1:MOV R6,#250 (7)250--->R6

D2:DJNZ R6,D2 (8)(R6-1),等于零执行下一条,不等于零,则跳转到D2

DJNZ R7,D1 (9)(R7-1),等于零执行下一条,不等于零,则跳转到D1

RET (10)当前堆栈指针减2,返回到(3)CLR P1.0继续执行MAIN 主程序。

END . (11)程序结束(伪指令)

扩展资料:

RET是子程序的返回指令,此外,ret还是检测血液的时候的一项,现在常规医院都有的实验室项目。

RET(Resolution Enhancement Technology)是分辨率增强技术的意思。

有RET功能的打印机,可以使打印出来的图形几乎没有锯齿,一台400×400DPI的激光打印机,如果有RET功能,其打印效果可以与600×600DPI的激光打印机想媲美。

(SP)->PCH,然后(SP)-1->SP

(SP)->PCL,然后(SP)-1->SP

参考资料:百度百科 ------ ret


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12158845.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存