汇编语言每次LOOP后,CX不是减1,而是直接变成0了,

来源:百度知道 编辑:UC知道 时间:2024/05/28 05:51:49
DATAS SEGMENT
ARY DW 6,2,1,98,21,2,-2
CT EQU ($-ARY)/2
DATAS ENDS

STACKS SEGMENT STACK 'S'
DW 256 DUP(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DI,CT
MOV BX,OFFSET ARY
A: DEC DI
JZ EXIT
MOV CX,DI
MASE:
MOV AX,[BX]
CMP AX,[BX+2]
JGE JIM
XCHG AX,[BX+2]
JIM: ADD BX,2
LOOP MASE ;这一步每次LOOP后,CX不是减1,而是直接变成0了,
;导致到不了mase,怎么回事??

JMP A
EXIT:
MOV AH,4CH
INT 21H
CODES ENDS
END START

应该用“单步执行”,你一定用的是“跳过”,用“单步执行”loop again后cx减1,而“跳过”后整个循环执行完毕所以cx就变为0了。它们两个功能不一样的!

检查了,没有出现你说的问题,第一次运行到那个LOOP时CX=6,过了那个LOOP,CX=5正常,你最好用debug -t来逐句跟踪一下