⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 count.asm

📁 微机原理实验 包括 口令识别 数制转换 计算三角函数 贪食蛇 扬声器控制
💻 ASM
字号:
DATA SEGMENT
	NUM 		DB 		-19,28,37,-46,55,61,-74,255
	NUMC 		EQU 	$-NUM
	COUNT 		DB 		? ,"$"
	MAX 		DB 		-127
	MIN 		DB 		127
	MSG_MAX 	DB 		0DH,0AH,"MAX=","$"
	MSG_MIN 	DB   	"H,MIN=","$"
	MSG_END	DB	  	"H","$"
DATA ENDS 

STACK SEGMENT STACK
	DB 100 DUP(?)
STACK ENDS

CODE SEGMENT
	ASSUME 	CS:CODE,DS:DATA,SS:STACK
  START:
MOV	AX,DATA 
	MOV	DS,AX 
	LEA		SI,NUM		;将NUM的地址传给SI
	MOV	CX,NUMC	;CX记录还未统计的NUM的个数
	XOR	BL,BL		;BL置0

  NEXT :
MOV	AL,[SI]
	CMP	AL,0		;AL与0做比较
	JGE		POSI		;比0大的话,BL不增加
	CMP	AL,-1		;-1即255,NUM中不含-1
	JE		POSI		;如果是255的话,BL不增加
	INC		BL			;负数计数加一
  POSI :
	CMP	MAX,-1		;最大值是255,则不改变MAX的值
	JE		NMAX
	CMP	AL,-1		;AL是255,则直接把MAX置为255
	JNE		N255
	MOV 	MAX,AL
	JMP 	NMAX
N255 :
CMP 	AL,MAX		;比较AL与MAX的大小关系		
	JLE 	NMAX
	MOV 	MAX,AL		;更新MAX
  NMAX :
CMP 	AL,MIN		;比较AL与MIN的大小关系
	JGE 	NMIN
	MOV 	MIN,AL		;更新MIN
  NMIN :	
	INC 	SI			;SI移动一位
	LOOP 	NEXT

	MOV 	COUNT,BL
	OR 		COUNT,30H
	MOV 	DX,OFFSET COUNT
	CALL   DISP		;显示负数的个数
	MOV 	DX,OFFSET MSG_MAX
	CALL	DISP		
	MOV 	BL,MAX
	CALL 	PRINTHEX	;调用PRINTHEX函数把MAX按十六进制显示出
	MOV 	DX,OFFSET MSG_MIN
	CALL   DISP
	MOV 	BL,MIN
	CALL 	PRINTHEX	;调用PRINTHEX函数把MIN按十六进制显示出
	MOV 	DX,OFFSET MSG_END
	CALL 	DISP

	MOV 	AH,4CH
	INT 	21H

DISP    PROC			;输出字符串
        MOV	AH,9
        INT		21H
        RET    
DISP    ENDP

PRINTHEX PROC			;将BL按十六进制显示出
	MOV	DL,BL		;把BL的值存到DL中
	MOV   	CL,4		
	SHR   	DL,CL  		;DL右移4位,先将BL高4位以十六进制显示出
 	ADD   	DL,30H		;”0”的ASCII码为30H
	CMP   	DL,3AH		;如果大于9
	JL 		PDL1
	ADD   	DL,07H 		;再加7 因为” A”的ASCII码是41H
  PDL1: 
MOV	AH,2		
	INT		21H			;显示出BL高4位的十六进制
	MOV   	DL,BL		
  	AND   	DL,0fH		;取BL的低四位
 	ADD   	DL,30H		;和高四位一样的处理方式,显示出低四位表示的十六进制
	CMP   	DL,3AH
	JL 		PDL2
	ADD    DL,07H
  PDL2: 
MOV 	AH,2
	INT   	21H
	RET
PRINTHEX ENDP
CODE ENDS 
END START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -