请教一个问题,JCXZ跳转问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 18:29:54
很奇怪,我的代码大概是这样写的
JCZX END2 ;CX中有数值
LOOP1:
……
LOOP LOOP1
END1:
……
END2
……
可为什么他就是无法跳转到END2来呢,总是执行完END1之后再执行END2,我只是想问,我这样写,结构和语法上有没有错?
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:
MOV AX,DSEG
MOV DS,AX
MOV CX,10
JCXZ END2
LOOP1:LOOP LOOP1
END1:
MOV DX,OFFSET MSG1
MOV AH,09H
INT 21H
END2:
MOV DX,OFFSET MSG2
MOV AH,09H
INT 21H
MOV AX,4C00H
INT 21H
CSEG ENDS
END START
这是我写的另一个程序,用来测试刚才那个错误,结果发现跟刚才的情况是一样的,它总是先显示MSG1之后再显示MSG2,好郁闷。。。怎么会这样?
——————————————————————————————————————————————
那JCXZ有什么用,难道只是让他退出循环而已吗?可我记得我们老师说过,他会自动检测CX是否为零,不为零就“自动减一”,为零时跳转的。。。

用debug测试发现没有“自动减一”啊
Loop指令是让cx减1,再判断cx是不是0,不是则返回

jcxz指令用处就是检测cx是不是0,这个也不一定都是用在循环上。。具体例子想不起来

每个指令总有他有用的地方,说不定哪次编程会突然需要这个指令了呢

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

JCXZ END2,程序执行到这的时候CX=10并非是0,所以不会跳转,也就是说会继续运行下去(先显示MSG1再显示MSG2)

你把MOV CX,10改成 MOV CX,0,再试试就看出区别来了

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
指令应该是 JCXZ END2 吧

当CX=0的时候跳转到END2,你说CX中不为零,那就不会跳转

结构上这没有错误