. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于检测点9.3的问题??  [待解决] 回复[ 27次 ]   点击[ 1543次 ]  
huibinfog
[帖 主]   [ 发表时间:2008-02-18 11:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-01-17 15:56
利用loop指令,实现在内存2000段中查找第一个值为0的byte, 找到后,将它的偏移地址存储在dx中 

assume cs:code 

code segment 
  
  start:mov ax, 2000h 
        mov ds, ax 
        mov bx, 0 
       
      s:mov cl, [bx] 
        mov ch, 0 
         
        ____________  
        inc bx 
        loop s 
       
     ok:dec bx 
        mov dx, bx 
        mov ax, 4c00h 
        int 21h 
code ends 
end start
这个题里空的地方是添inc cx呢还是添dec cx呢?我感觉好象都可以啊!!我做的对不对啊!给个指导谢谢各位!
另外我想问下inc和dec是把内存地址加减1了还是把里面的内容加减1了?还有就是我想问下loop这个指令是不是说执行到这一条上才会cx=cx-1呢??
wdm
[第1楼]   [ 回复时间:2008-02-18 13:43 ]   [引用]   [回复]   [ top ] 
荣誉值:342
信誉值:0
注册日期:2007-12-06 10:21
inc 寄存器 这样的格式当然是将寄存器的内容加1了。

还有就是我想问下loop这个指令是不是说执行到这一条上才会cx=cx-1呢??
============
是的。loop相当于 cx=cx-1;cmp cx,0;jnz 标号。
wdm
[第2楼]   [ 回复时间:2008-02-18 13:47 ]   [引用]   [回复]   [ top ] 
荣誉值:342
信誉值:0
注册日期:2007-12-06 10:21
这个题里空的地方是添inc cx呢还是添dec cx呢?我感觉好象都可以啊!!
===============
inc是加1,dec是减1,当然不能都可以了。
楼主的最后一问,才是考虑这这个地方的关键点。考虑一下吧。
huibinfog
[第3楼]   [ 回复时间:2008-02-18 15:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-01-17 15:56
那这么说应该是inc 1啦!对吧!因为cx内容变成1,然后执行到loop时减1变成0就会往下了对不?
duckgaga
[第4楼]   [ 回复时间:2008-04-15 13:21 ]   [引用]   [回复]   [ top ] 
荣誉值:44
信誉值:0
注册日期:2008-04-11 13:33
那这么说应该是inc 1啦!对吧!因为cx内容变成1,然后执行到loop时减1变成0就会往下了对不?
------------------
回复:对了,因为如果在执行loop前cx就等于0的话,loop时减1,cx就会变成0ffh了,这一点很重要哦
ywb1896
[第5楼]   [ 回复时间:2008-04-17 14:00 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-05 19:14
ok:dec bx ?????
为什么要减去一呢?
ywb1896
[第6楼]   [ 回复时间:2008-04-19 16:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-05 19:14
哦 我知道了
fancx
[第7楼]   [ 回复时间:2008-10-03 10:15 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:0
注册日期:2008-08-02 09:52
真的很疑问。当[bx]值=00时
s:mov cl, [bx]  
        mov ch, 0  

下面空格处添加inc cx
这时CX不就 是1了吗?非0
怎么就会跳到OK:dec bx这一条指令呢
qx520
[第8楼]   [ 回复时间:2008-11-12 17:08 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:3
注册日期:2008-07-24 01:31
怎么知道当找到[BX]等于前一位0时恰好能让CX-1等于0的?
gulunhua
[第9楼]   [ 回复时间:2008-11-13 15:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-11-06 14:36
怎么知道当找到[BX]等于前一位0时恰好能让CX-1等于0的?
------------------
回复:接下来有一个loop s,会自动计算(cx)=(cx)-1,这个时候不就是1-1=0嘛,然后接着到ok:……
qx520
[第10楼]   [ 回复时间:2008-11-15 12:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:3
注册日期:2008-07-24 01:31
我的表达错了吧,如何找到[BX]等于前一位0的那位数的
push69
[第11楼]   [ 回复时间:2008-12-26 10:04 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2008-12-19 02:06
前面章节内容
执行loop 标号指令相当于 cx=cx-1

另外5楼
假设在4单元找到0,下面还有条指令inc bx这时候bx=5但应该是4单元找到的,所以dec bx
281572218
[第12楼]   [ 回复时间:2009-01-09 16:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-20 17:02
assume cs:code  
code segment  
  start:mov ax, 2000h  
        mov ds, ax  
        mov bx, 0  
      s:mov cl, [bx]    ;如2000:0003内存单元中为0  ,cl=0
        mov ch, 0      
        inc cx         ;cx=0001
        inc bx         ;加1  2000:0004 
        loop s        ;cx=cx-1
     ok:dec bx      ;上面加了1这里就减1   bx=0003
        mov dx, bx  ;DS:偏移地址  dx=0003
        mov ax, 4c00h  
        int 21h  
code ends  
end start 

debug 里面看就OK了。
378499835
[第13楼]   [ 回复时间:2009-02-19 10:35 ]   [引用]   [回复]   [ top ] 
荣誉值:11
信誉值:1
注册日期:2008-11-24 20:35
开始,不明白看了,楼上的分析后明白了,谢谢各位大虾
378499835
[第14楼]   [ 回复时间:2009-02-19 10:36 ]   [引用]   [回复]   [ top ] 
荣誉值:11
信誉值:1
注册日期:2008-11-24 20:35
开始,不明白,看了楼上的分析后明白了,谢谢各位大虾
mengdewan
[第15楼]   [ 回复时间:2009-03-02 07:57 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:5
注册日期:2008-12-18 16:07
楼上的那个分析的太好了   恍然大悟
yslijt
[第16楼]   [ 回复时间:2009-03-15 09:33 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-14 20:58
谢谢各位啊
昨天想了一晚上没想明白。。。
xjfhack
[第17楼]   [ 回复时间:2009-08-24 21:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-08-24 21:15
jcxz offset ok+1
huguanglai
[第18楼]   [ 回复时间:2009-09-17 12:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-10-29 16:30
jcxz offset ok+1
服了。哈哈
am0511
[第19楼]   [ 回复时间:2009-11-07 17:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-06-29 16:09
jcxz offset ok+1
------------------
回复:思路很好,但是如果[BX]中的数据为1时就完了。
cx=1
jcxz=不操作
inc bx
loop=cx-1=0
向下执行

所以此题目的只能是 将 cx+1  
inc cl\ inc cx \add cl,1\add cx,1
ydjsjwpf
[第20楼]   [ 回复时间:2009-12-17 23:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-17 22:46
真的很疑问。当[bx]值=00时
s:mov cl, [bx]  
        mov ch, 0  

下面空格处添加inc cx
这时CX不就 是1了吗?非0
怎么就会跳到OK:dec bx这一条指令呢
------------------
回复:
if((bx)==0)
  s: mov ci,[bx]
     mov ch,0 ;cx==0
     inc cx ;cx==1
     inc bx
     loop s  ;到s处后,先cx-1,发现cx==0所以,结束循环,执行ok:dec bx
philbert_pb
[第21楼]   [ 回复时间:2010-06-29 23:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-05-25 22:09
真的很疑问。当[bx]值=00时 
s:mov cl, [bx]   
        mov ch, 0   

下面空格处添加inc cx 
这时CX不就 是1了吗?非0 
怎么就会跳到OK:dec bx这一条指令呢 
------------------ 
回复: 
if((bx)==0) 
  s: mov ci,[bx] 
     mov ch,0 ;cx==0 
     inc cx ;cx==1 
     inc bx 
     loop s  ;到s处后,先cx-1,发现cx==0所以,结束循环,执行ok:dec bx
------------------
有标号,不代表一定要有跳转语句跳转到这个标号,顺序执行到标号这行语句也是可以的啊
hongmi
[第22楼]   [ 回复时间:2011-02-22 21:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-22 18:58
大受启发!
happyhuan
[第23楼]   [ 回复时间:2011-03-28 11:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-02 16:20
Jcxz offset ok+1 还是可以的吧。即使是bx内容为1,它顺序执行下去也是对的吧,如果是0的话,可以实现快速的跳转。
plagueing
[第24楼]   [ 回复时间:2011-03-28 18:52 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2009-07-16 14:51
格式因为: jcxz 标号
所以应该为:jcxz ok+1
上级测试通过
you8881111
[第25楼]   [ 回复时间:2011-05-06 10:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-05-03 21:02
就是就是先开始搞不明白为什么是inc cx再看上面大虾们的分析终于明白了!谢谢呀
vs9841
[第26楼]   [ 回复时间:2011-07-01 09:27 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-01-17 12:29
Jcxz offset ok+1
offset可以这样用吗。我的编译器不支持这样的行为。不知道大家的怎么样。
vs9841
[第27楼]   [ 回复时间:2011-07-01 09:52 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-01-17 12:29
jczx ok+1是不正确的。
假设2000:0 01 02 03 - - - -- - -- 

执行mov cl,[bx]
    mov ch,0       此时 cx=1
    jcxz bx+1      不作执行
    inc bx
    loop s        cx-1=0跳出执行 就会导致找不到2000的第一个为零的字节,就程序就退出了。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved