汇编中ret的作用

源代码是这样的assumecs:codestacksegmentdb16dup(0)stackendscodesegmentmovax,4c00hint21hstart:... 源代码是这样的
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,16
mov ax,0
push ax
mov bx,0 //这行有什么用?
ret //为什么说ret执行后IP=0,CS:IP指向代码段的第一条指令?
code ends

还请各位指教!
end start
展开
 我来答
三棱的饭圈观察日记
推荐于2019-11-11 · TA获得超过5563个赞
知道答主
回答量:38
采纳率:0%
帮助的人:5728
展开全部

汇编中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

Sigma-Aldrich
2018-06-11 广告
Duolink PLA技术可通过同一个实验即可完成对蛋白质互作及其修饰的检测、定量以及确定细胞定位等。Duolink基于原位PLA技术(即邻位连接分析技术),可以帮助您在内源蛋白质表达过程中进行该分析。... 点击进入详情页
本回答由Sigma-Aldrich提供
Ron2018
推荐于2017-10-12 · TA获得超过3285个赞
知道小有建树答主
回答量:338
采纳率:0%
帮助的人:499万
展开全部
在这里RET指令的内部操作是:栈顶字单元出栈,其值赋给IP寄存器。即实现了一个程序的转移,将栈顶字单元保存的偏移地址作为下一条指令的偏移地址。

看这段代码不难发现,程序从start后面的语句开始,用mov ax,0指令,让(ax)=0,然后push ax,即让栈顶字单元的值为0。所以ret执行后,(IP)=0,但是CS值不变,即CS一直指向code segment这个段(这个功能是通过assume cs:code实现的),程序转移到code segment段的开头的第一条语句,即mov ax,4c00h,然后调用int 21h结束程序。

mov bx,0这一步嘛,可以理解为这段代码的具体功能就是让bx清零。

补充说明一下:返回指令分为两种,近返回和远返回。
近返回的指令就是ret,内部操作为只出栈一个字单元,只改变IP的值。
远返回的指令是retf,内部操作为连续出栈两个字单元,分别改变IP和CS的值。
这段代码用的是近返回,只改变了IP的值。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
porti120
2012-12-07 · TA获得超过4620个赞
知道大有可为答主
回答量:3188
采纳率:12%
帮助的人:1576万
展开全部
RET指令的内部操作是:栈顶字单元出栈,其值赋给IP寄存器。即实现了一个程序的转移,将栈顶字单元保存的偏移地址作为下一条指令的偏移地址。

满意请采纳,谢谢!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
abc福利
2013-01-22
知道答主
回答量:2
采纳率:0%
帮助的人:3042
展开全部
{"ret":-2}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式