.MODEL SMALL
.STACK 100H
.DATA
ARRAY DB 1,9,8,3,4,7
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
MOV SI,OFFSET ARRAY
MOV CX,6
MOV BL, [SI]
LOOPX:
CMP [SI], BL
JGE UPDATE
RESUME:
INC SI
LOOP LOOPX
ADD BL,51
MOV DL,BL
MOV AH,2
UPDATE:
MOV BL,[SI]
JMP RESUME
MAIN ENDP
END MAIN
我想读取数组中最大的数
程序不完整
- 使用
MOV DL,BL
MOV AH,2
,您已经设置了使用DOS。PrintCharacter函数02h,但是您忘记实际调用它了。只需添加int 21h
。 你忘记结束程序了!您已经允许代码进入UPDATE,其中跳转到RESUME将创建一个无限循环。使用DOS。终止功能4Ch.
程序有错误/打字错误
要将单个数字转换为可打印的字符,需要添加48,所以ADD BL,51
是错误的。
程序不是最优的
-
第一个数组元素与自身进行比较,并触发BL的冗余重新加载。元素,此代码需要5比较得到结果。
-
由于您希望通过DL寄存器输出结果,因此最好从一开始就使用DL。
-
除非您为8086编程,否则最好将
loop ...
替换为dec cx
jnz ...
MOV SI, OFFSET ARRAY MOV CX, 6 - 1 ; 5 comparisons MOV DL, [SI] ; First element LOOPX: INC SI CMP [SI], DL JLE DONTUPDATE MOV DL, [SI] DONTUPDATE: DEC CX JNZ LOOPX ADD DL, 48 ; You could write this as ADD DL, '0' MOV AH, 02h INT 21h MOV AX, 4C00h INT 21h