首页
社区
课程
招聘
[旧帖] [求助]一个简单的汇编问题,菜鸟求助 0.00雪花
发表于: 2009-12-13 16:30 1338

[旧帖] [求助]一个简单的汇编问题,菜鸟求助 0.00雪花

2009-12-13 16:30
1338
assume cs:code
code segment
        xor ax,ax
        push ds
        push ax
        ;-----------------
        mov ax,0BC62H
        mov cx,16
        mov bl,0
  c:rol ax,1
        mov dx,ax
        and dx,0001H
        jz addcount
next:loop c
        add bl,30h
        mov dh,0
        mov dl,bl
        mov ah,2h
        int 21h
        ;-----------------
        ret
addcount:
        inc bl
        jmp next
code ends
end
-------------------------------------
按理说,这里应该输出一个8.题目要求的是求一个数中0的个数。
但是输出的时候是一个死循环输出,不停的重复输出指定的字符。
也即输出N多的8,CPU爆满。
但是将xor ax,ax   push ds   push ax --- ret改成mov ax,4ch int 21h就没事了,正常输出
这是什么原因呢?
请各位路过的不管是菜鸟还是大虾都来看看吧。感激不尽

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
改成 retf
2009-12-13 17:25
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
next:loop c    变成死循环了, 后面的语句没有执行
  add bl,30h
  mov dh,0
  mov dl,bl
  mov ah,2h
  int 21h
2009-12-13 17:50
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不知道为什么,我这里单独一个 c 不能作为标号
sessiondiy大牛是正确的
2009-12-13 18:13
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
next:loop c 我觉得这个地方应该要有出口
2009-12-13 18:21
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
入口有
  push ds
  push ax
  
ret之前为什么不平栈?  每次都RET到0(ax=0)处, 从而可能又回来了.
2009-12-13 21:41
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
7
retf = return to ds:0 = return to PSP.0 = CD 20 = INT 20 = termial program

ret = retun to cs:0 = start = never ending & stack will overflow
2009-12-13 22:19
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼上两位正解,堆栈平衡问题。另,retf学习了……
2009-12-14 00:20
0
雪    币: 72
活跃值: (52)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
正在学习中。。。。。。
2009-12-14 12:06
0
游客
登录 | 注册 方可回帖
返回
//