汇编网首页登录博客注册
fontomas的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  CHERISH YOUR LIFE!
  • 『姓名』:云清                
  • 『性别』:保密  『发送消息
  • 个人说明:学问之美,在于使人一头雾水;诗歌之美,在于煽动男女出轨。
  • 详细信息『加为好友』
学习动态
好友圈
友情链接

[2008-08-11 06:40] 检测点9.2—— 一点感想

利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。    
assume cs:code    
code segment    
    start:
        mov ax, 2000H
        mov ds, ax
        mov bx, 0H
    s:  ________
        ________
        ________
        ________
        jmp short s
    ok:
        mov dx, bx
        mov ax, 4C00H
        int 21H
code ends
end start

答案:
第一条指令:mov cl,[bx]
第二条指令:mov ch,0
第三条指令:jcxz ok
第四条指令:inc bx
---------------
分析:此题颇费了一番脑筋。刚刚拿到题目的时候完全不知道该如何下手,尤其想不通该如何实现题目中的“查找”二字,只是觉得要使用jcxz指令,就要利用它的cx=0的特性,可是还是不知该如何着手。
后来在论坛的相关版面搜索了一些贴子,仔细的看完方才恍然大悟!
一开使我认为答案的前3条指令是利用了jcxz指令,当cx=0时才执行的特性,使得jcxz指令得以执行、程序得以实现,是十足的欺骗,根本没有实现题目要求中的“查找”的要求!而inc bx则根本可有可无,完全看不出把它填在这里有什么作用,是一条十足的废指令!
然后,我想,如果inc bx是废指令,为什么大家都在最后填它?如果它是废指令,而答案的前3条又利用了jcxz指令的特性,那这道题目根本就没有实现题目要求的“循环查找”功能,但这可能么?那此题还有什么意义?
然后我又接着往下想,到底怎样才能“循环查找”呢?以前我们一直用loop指令来实现,可是此题目里只有两个标号,无论如何也不可能循环回去啊?!这时我突然有看到了jmp short s这条指令,你又什么感觉?反正我真想大嘴巴子抽自己!
找到了循环的办法,但是我还是觉得答案在欺骗我们,直接都令cx=0了,哪里还需要循环?不循环有怎么实现“查找”?!
OK,写到这先换个行,随便问个问题,看书求速度,抓进度的朋友们,你们看到这里是不是也有我上面的疑问——既然CX已经等于零了,那还需要查找吗?这根本就是在骗人嘛!
好了,回魂儿了,如果你有上面的问题,那我给你个建议,放下你的速度,回去翻翻书吧,你走的太快了,快要摔倒了!

bx是什么?[bx]又是什么?bx=0,则[bx]也等于零吗?搞清楚这一点,你就知道mov cl,[bx]和inc bx的作用了!那么可以祝贺你了!

上面的废话是我在做检测点9.2时的一点感想,遗憾的是答案不是自己想出来的。
评论次数(1)  |  浏览次数(307)  |  类型(汇编作业) |  收藏此文  | 

[  游客   发表于  2008-08-11 09:45  ]

汇编之美妙 可见一斑。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码