满意答案
wss5699
2015.06.25
采纳率:52% 等级:9
已帮助:963人
统计负数的个数
设数据段有如下有符号数定义
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
11分享举报