codefish123 发表于 2011-5-22 23:27:42

为什么这里填写inc cx啊

本帖最后由 loop 于 2011-5-29 23:30 编辑

补全程序,利用loop指令,实现在内存2000H段中查找第一个值为0的byte,找到后,将它的偏移地址存储在dx中。

assume cs:code
code segment
start:
      mov ax,2000h
      mov ds,ax
      mov bx,0
      s:
                mov cl,
                mov ch,0
                inc cx    这里为什么填写inc cx
                inc bx
      loop s
      
      ok:
                dec bx
                mov dx,bx
                mov ax,4c00h
                int 21h
code ends
end start

陌路狂奔 发表于 2011-5-22 23:52:18

本帖最后由 陌路狂奔 于 2011-5-23 00:03 编辑

当前面索引到0时,CX是=0的而LOOP循环前,CX=CX-1,如果结果为0则退出循环执行下面的语句。CX不自增1的话,0-1会等于FFFF
我觉得换成JCXZ OK也是可行的

winddyj 发表于 2011-5-23 00:35:47

把数据段的数据依次按字节读出,并把值传给CL
读到值为0的数据,这时CX就为0,说明找到了
这时候应该停止循环,只有当CX为1时,这次循环才会停止,所以要INC CX
INC CL的效果是一样的
但楼上所说的JCXZ OK不对,因为把值给DX时,BX有减1的操作,所以,不能在那儿跳走
要把INC BX的操作走完后才能转向OK,否则最后储存的地址会比实际为0的地址少1
页: [1]
查看完整版本: 为什么这里填写inc cx啊