关于汇编语言中的PUSH问题。
REPET:PUSHSIPUSHCXPUSHCX;CX为内循环计数POPDX;DX为外循环计数DECCXJENEXT1;是最后一个字符,不再找重复字符MOVAL,[SI]...
REPET: PUSH SI
PUSH CX
PUSH CX ;CX为内循环计数
POP DX ;DX为外循环计数
DEC CX
JE NEXT1 ;是最后一个字符,不再找重复字符
MOV AL,[SI]
CMP AL,0
JE NEXT1 ;若为空字符,则跳过
COMP: DEC SI ;A
CMP AL,[SI]
JNE GOON ;为非重复字符
MOV BYTE PTR[SI],0 ;查出与该字符重复的所有字符,并用0替换
GOON: LOOP COMP
NEXT1: POP DX
POP SI
DEC SI
DEC DX
MOV CX,DX
JNZ REPET ;对所有重复字符都进行查找
上面的代码是找出重复字符,然后把重复字符代替为0,请问为什么一开始要进行两次PUSH CX 展开
PUSH CX
PUSH CX ;CX为内循环计数
POP DX ;DX为外循环计数
DEC CX
JE NEXT1 ;是最后一个字符,不再找重复字符
MOV AL,[SI]
CMP AL,0
JE NEXT1 ;若为空字符,则跳过
COMP: DEC SI ;A
CMP AL,[SI]
JNE GOON ;为非重复字符
MOV BYTE PTR[SI],0 ;查出与该字符重复的所有字符,并用0替换
GOON: LOOP COMP
NEXT1: POP DX
POP SI
DEC SI
DEC DX
MOV CX,DX
JNZ REPET ;对所有重复字符都进行查找
上面的代码是找出重复字符,然后把重复字符代替为0,请问为什么一开始要进行两次PUSH CX 展开
5个回答
展开全部
每次REPET开始,CX是需要检测的字符数,SI是需要检测字符系列一端地址
如对字符系列检测时:abcdefaceda
首次进入,CX=11,SI指向第一个字符
PUSH CX在堆栈保存CX,
循环利用CX,结合LOOP COMP实现整个字符系列遍历检测(所谓的内循环)
取出CX赋予DX,--DX,检测是否为零,即是否还有字符需要检测
【事实上push,pop这些操作你只需当它是参数传递与保存即可】事实上
第二行与第三行push cx,pop dx完全没意义,可以去掉
事实上,在NEXT1子指令系列中
可以不用DX,直接使用 POP CX, 掉DEC DX与MOV CX,DX,将JNZ REPET 改为LOOP REPET
顺便说一句,事实上该程序的SI事实上是:第一次遍历先指向最后一个字符,然后向前遍历;第二次遍历指向倒数第二个字符,然后向前遍历;。。。
如对字符系列检测时:abcdefaceda
首次进入,CX=11,SI指向第一个字符
PUSH CX在堆栈保存CX,
循环利用CX,结合LOOP COMP实现整个字符系列遍历检测(所谓的内循环)
取出CX赋予DX,--DX,检测是否为零,即是否还有字符需要检测
【事实上push,pop这些操作你只需当它是参数传递与保存即可】事实上
第二行与第三行push cx,pop dx完全没意义,可以去掉
事实上,在NEXT1子指令系列中
可以不用DX,直接使用 POP CX, 掉DEC DX与MOV CX,DX,将JNZ REPET 改为LOOP REPET
顺便说一句,事实上该程序的SI事实上是:第一次遍历先指向最后一个字符,然后向前遍历;第二次遍历指向倒数第二个字符,然后向前遍历;。。。
展开全部
推DS
小斧头,斧头
PUSH AX
COM程序通常使用,储存在DS:0000一个INT 20H指令,执行上面的代码,以便使用RETF INT 20H ,从而使该程序结束。
小斧头,斧头
PUSH AX
COM程序通常使用,储存在DS:0000一个INT 20H指令,执行上面的代码,以便使用RETF INT 20H ,从而使该程序结束。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
所以专业,你为什么不读书了吗?
数据寄存器累加器,通用寄存器。累加器保存的计算结果,通用寄存器保存数据。
代码段,当然,是保存当前正在运行的代码;
数据段的数据保存在当前程序;
保存的返回地址和程序参数(地址堆栈段)子程序调用;
的其他部分也保存数据,但一般保存的批处理计算的结果。
数据寄存器累加器,通用寄存器。累加器保存的计算结果,通用寄存器保存数据。
代码段,当然,是保存当前正在运行的代码;
数据段的数据保存在当前程序;
保存的返回地址和程序参数(地址堆栈段)子程序调用;
的其他部分也保存数据,但一般保存的批处理计算的结果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
基本的框架如下自己分析下不难理解!
REPET:
PUSH SI
PUSH CX
PUSH CX
POP DX
......
NEXT1: POP DX
POP SI
DEC SI
DEC DX
MOV CX,DX
JNZ REPET
REPET:
PUSH SI
PUSH CX
PUSH CX
POP DX
......
NEXT1: POP DX
POP SI
DEC SI
DEC DX
MOV CX,DX
JNZ REPET
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一次是保存CX,第二次是将CX值传递给DX
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询