微机原理编程题!计算负数的个数问题!

从BUF开始有一个字节型数组,共有100个元素,编写完整汇编源程序,计算这个数组中负数的个数,并将结果存入内存COUNT单元。

  统计负数的个数
  设数据段有如下有符号数定义
  NUM DB -19, 28, 37, -46, 55, 61, -74, 255
  设计一个程序,完成两项要求:
  ⑴ 统计并且显示负数的个数;
  ⑵ 求最大值和最小值并在屏幕上显示。
  显示格式由自己决定。

  .MODEL SMALL
  .STACK 100
  .DATA
  NUM DB -19, 28, 37, -46, 55, 61, -74, 255
  COUNT EQU $-OFFSET NUM
  DATA DB 3 DUP(0)
  MESS1 DB " MAX:$"
  MESS2 DB " MIN:$"
  MESS3 DB " NUMBER OF NEGETIVE:$"
  .CODE
  .STARTUP
  MOV SI,OFFSET NUM
  MOV DI,OFFSET DATA
  MOV AL,[SI]
  MOV [DI],AL
  MOV [DI+1],AL
  MOV CX,COUNT;内存中数据的个数
  XOR BX,BX;储存个数,最后存在[DI+2]
  COMP: MOV AL,[SI];循环比较以及更新数值
  INC SI
  CMP AL,[DI]
  JL L1
  MOV [DI],AL
  L1: CMP AL,[DI+1]
  JG L2
  MOV [DI+1],AL
  L2: CMP AL,0
  JGE L3
  INC BX
  L3: LOOP COMP
  MOV [DI+2],BX
  MOV DX,OFFSET MESS1;-----输出最大值
  MOV AH,9
  INT 21H
  MOV AL,[DI]
  CALL OUTPUT
  MOV DX,OFFSET MESS2;-----输出最小值
  MOV AH,9
  INT 21H
  MOV AL,[DI+1]
  CALL OUTPUT
  MOV DX,OFFSET MESS3;-----输出负数个数
  MOV AH,9
  INT 21H
  MOV AL,[DI+2]
  CALL OUTPUT
  MOV AH,4CH
  INT 21H
  ;------子过程输出十六进制整数
  OUTPUT PROC
  MOV BL,AL
  MOV CL,4
  SHR AL,CL
  CALL PRINT ;输出高位
  MOV AL,BL
  AND AL,0FH
  CALL PRINT ;输出低位
  MOV AH,2
  MOV DL,'H'
  INT 21H ;输出H符号
  RET
  OUTPUT ENDP
  PRINT PROC ;子程序,输出16进制数
  MOV AH,02H
  MOV DL,AL
  CMP DL,09H
  JB L4
  ADD DL,7
  L4: ADD DL,30H
  INT 21H
  RET
  PRINT ENDP
  .EXIT
  END
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-03
统计负数的个数
设数据段有如下有符号数定义
NUM DB -19, 28, 37, -46, 55, 61, -74, 255
设计一个程序,完成两项要求:
⑴ 统计并且显示负数的个数;
⑵ 求最大值和最小值并在屏幕上显示。
显示格式由自己决定。

.MODEL SMALL
.STACK 100
.DATA
NUM DB -19, 28, 37, -46, 55, 61, -74, 255
COUNT EQU $-OFFSET NUM
DATA DB 3 DUP(0)
MESS1 DB " MAX:$"
MESS2 DB " MIN:$"
MESS3 DB " NUMBER OF NEGETIVE:$"
.CODE
.STARTUP
MOV SI,OFFSET NUM
MOV DI,OFFSET DATA
MOV AL,[SI]
MOV [DI],AL
MOV [DI+1],AL
MOV CX,COUNT;内存中数据的个数
XOR BX,BX;储存个数,最后存在[DI+2]
COMP: MOV AL,[SI];循环比较以及更新数值
INC SI
CMP AL,[DI]
JL L1
MOV [DI],AL
L1: CMP AL,[DI+1]
JG L2
MOV [DI+1],AL
L2: CMP AL,0
JGE L3
INC BX
L3: LOOP COMP
MOV [DI+2],BX
MOV DX,OFFSET MESS1;-----输出最大值
MOV AH,9
INT 21H
MOV AL,[DI]
CALL OUTPUT
MOV DX,OFFSET MESS2;-----输出最小值
MOV AH,9
INT 21H
MOV AL,[DI+1]
CALL OUTPUT
MOV DX,OFFSET MESS3;-----输出负数个数
MOV AH,9
INT 21H
MOV AL,[DI+2]
CALL OUTPUT
MOV AH,4CH
INT 21H
;------子过程输出十六进制整数
OUTPUT PROC
MOV BL,AL
MOV CL,4
SHR AL,CL
CALL PRINT ;输出高位
MOV AL,BL
AND AL,0FH
CALL PRINT ;输出低位
MOV AH,2
MOV DL,'H'
INT 21H ;输出H符号
RET
OUTPUT ENDP
PRINT PROC ;子程序,输出16进制数
MOV AH,02H
MOV DL,AL
CMP DL,09H
JB L4
ADD DL,7
L4: ADD DL,30H
INT 21H
RET
PRINT ENDP
.EXIT
END本回答被网友采纳
相似回答