当前位置: 代码迷 >> 汇编语言 >> 求最小值为什么没有输出结果?解决方法
  详细解决方案

求最小值为什么没有输出结果?解决方法

热度:7248   发布时间:2013-02-26 00:00:00.0
求最小值为什么没有输出结果?
求一组十进制无符号数(2位数)的最小值
,源码如下,为什么没有结果。由于是刚学汇编,调了很久也没找到问题所在,还请各位大虾帮帮忙

DATA SEGMENT   PARA
  BLOCK DB "52 ",   "14 ",   "56 ",   "85 ",   "34 "
        DB "63 ",   "38 ",   "70 ",   "18 ",   "69 "
    COUNT EQU   $-OFFSET   BLOCK
    MAX DB 2   DUP(?)
    DATA ENDS
       
      CSEG SEGMENT PARA   'CODE '
      START PROC FAR
      ASSUME CS:CSEG,   DS:DATA
      MOV AX,   DATA
      MOV   DS,   AX
      MOV SI,   OFFSET   BLOCK
      MOV BX,   OFFSET   MAX
      MOV CX,   COUNT
      MOV DH,   [SI]
      MOV DL,   [SI+1]
      INC   SI
      INC   SI
    COMP: LODSB
    MOV AH,   AL
      LODSB
      CMP AX,   DX
      JG NEXT
      MOV DX,   AX
    NEXT: DEC CX
      LOOP   COMP
      MOV [BX],   DH
      MOV [BX+1],   DL
   
    PRINT: MOV BX,   OFFSET   MAX
      MOV   DL,   [BX]
      MOV AH,   2
      INT 21H
      MOV DL,   [BX+1]
      INT 21H
      MOV AH,   4CH
      INT 21H
    START ENDP
    CSEG ENDS
      END START

------解决方案--------------------------------------------------------
...
MOV CX, (COUNT-2) ;* n 个数据寻最大值, 只需要进行 (n-1) 次比较
MOV DH, [SI]
MOV DL, [SI+1]
INC SI
INC SI
COMP:LODSB
MOV AH, AL
LODSB
CMP AX, DX
JBE NEXT ;* 当前值比预置的最大值小时才直接转走. 否则就成了取最小值了
...

; 原来是取最小值, 又多了一个最后的 0000 值, 所以显示的是 00,00 就是没有显示了
  相关解决方案