检测点9.3
DATAS SEGMENT;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov bx,0
s:mov cl,
mov ch,0
inc cx
inc bx
loop s
ok:dec bx
mov dx,bx
MOV AH,4CH
INT 21H
CODES ENDS
END START
其实一开始的时候那个空我写的是jcxz ok;但是我感觉如果这样写的话和上一道题有什么很大的差别呢?然后我就去找了其他前辈写的代码,
发现其实有很多人一开始也跟我一样写的是jcxz;后来有一位前辈解释了,如果ds:处的值为1,那么jcxz不会运行,然后往下loop指令会先将cx-1得到cx=0;那么就会跳出循环继续像下走,走到ok标识处,这样得到的bx是错误的。如果cl处为0的话,应该将其+1再由loop指令将cx的值去减一;然后就会得到正确的bx了。
6666
谢谢分享 解释的很明确 我觉的,假如 CX 为0,执行减1的话,是不是变成FFFF,就不会往下执行,死循环了。
页:
[1]