高手帮看一下这个汇编程序!

来源:百度知道 编辑:UC知道 时间:2024/05/04 08:30:30
; FILENAME: EXA131.ASM
.486
DATA SEGMENT USE16
INCOME DW 850,600,700,800,900,700,650,750,850
NUM DB 0
N1 EQU 800
N2 EQU 900
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA

BEG: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET INCOME
MOV CX,9

BEGIN:CMP WORD PTR[BX],N1
JC NEXT

; FILENAME: EXA131.ASM ,经调试,结果正确.
;功能:计算DW中在800到900间的数的个数
DATA SEGMENT
INCOME DW 850,600,700,800,900,700,650,750,850
NUM DB 0
N1 EQU 800
N2 EQU 900
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA

BEG: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET INCOME
MOV CX,9
BEGIN:
mov ax,[bx]
CMP ax,N1
Jb NEXT ;小于800略去,JC是有进位转
CMP ax,N2
Ja NEXT ;大于900略去,JNA是≤900略去
INC NUM
NEXT: ADD bx,2
LOOP BEGIN
MOV DL,NUM
ADD DL,30H
MOV AH,2
INT 21H
mov ah,0
int 16h
MOV AH,4CH
INT 21H
CODE ENDS
END BEG

问题出在这一句上:
NEXT: ADD WORD PTR[BX],2
应该是:
NEXT: ADD BX,2

BEGIN:CMP WORD PTR[BX],N1
JC NEXT ;小于800的跳过INC NUM继续比较下一个数
CMP WORD PTR[BX],N2
JNC NEXT ;这里修改JNA为JNC不低于(即大于),大于900的跳过INC NUM继续比较下一个数

INC NUM
NEXT: ADD BX,2;偏移地址+2后移两个单元取下一个数,ADD WORD PTR[BX],2不会取下一个数,只是在第一个数上加2再