. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于检测点9.3的一些思考  [待解决] 回复[ 6次 ]   点击[ 521次 ]  
wueric88
[帖 主]   [ 发表时间:2012-10-29 16:32 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-10-16 22:27
这个程序全部代码(已修改)如下:  
assume cs:code  
code segment  
start:mov ax,2000h  
mov ds,ax  
mov bx,0  
s:mov cl,[bx]  
mov ch,0  
inc bx  
jcxz ok  
loop s  
ok:dec bx  
mov dx,bx  
mov ax,4c00h  
int 21h  
code ends  
end start  
1.这个程序中为什么在ok的地方加一句dec bx的呢,程序结束的时候岂不是第一个0单元的上一个单元么?
2.loop的执行过程就是cx自减1,然后判断cx是否为0,如果为0就不跳转,问题就是如果某个单元的值是1的话,这个时候执行到loop s那句的时候,cx就会变成0,然后就不跳转了,就会顺序执行下去了,这个时候得到的bx是第一个单元为1的地址而不是0了也?
chinatree
[第1楼]   [ 回复时间:2012-10-29 23:16 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
1,别忘了jcxz有个inc。
2,记得是jmp s的呢?
wueric88
[第2楼]   [ 回复时间:2012-10-30 10:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-10-16 22:27
1,别忘了jcxz有个inc。
2,记得是jmp s的呢?
------------------
回复:我看的这本书上市loop s的。
chinatree
[第3楼]   [ 回复时间:2012-10-30 13:51 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
不管它,你明白loop就行。
foxive
[第4楼]   [ 回复时间:2013-03-09 19:46 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-02-27 21:02
loop的执行过程就是cx自减1,然后判断cx是否为0,如果为0就不跳转,问题就是如果某个单元的值是1的话,这个时候执行到loop s那句的时候,cx就会变成0,然后就不跳转了,就会顺序执行下去了,这个时候得到的bx是第一个单元为1的地址而不是0了也?
所以:这里不能填jcxz ok
可以填些别的,比如:inc cx
jingyarufeng
[第5楼]   [ 回复时间:2014-08-18 15:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-10-05 19:31
哥,这里没用到LOOP指令,所以CX不自剪,而是把内存单元里的数据传给CX,如果是零,则转移到标号处执行。你差点把我也绕晕了。。。
gyq
[第6楼]   [ 回复时间:2014-08-18 15:59 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2014-08-02 21:25
楼主那个空填的是错的。
4楼正解,也可以填:
add cx,1
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved