发布网友 发布时间:2天前
共1个回答
热心网友 时间:2天前
你程序里没有输出到显示器的语句,我帮你改了下。调用dos21号中断,ah=9时用来显示以'$'结束的字符串。所以在你的num区增加一个字节存储'$'。而且个数在内存不是以ASCII存放。所以or 30h是为了转成ASCII码
DATAS SEGMENT
;此处输入数据段代码
BUF DB 7
DB 01H,38H,47H,90H,33H,09H,76H;01 ,8,G, ,3, ,v
NUM DB 4 DUP(?)
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV CH,BUF;数组个数N-->CH
MOV BX,1
MOV DX,0 ;DH 计数字的个数,DL计字母的个数
LP:MOV AH,BUF[BX]
CMP AH,30H; 0的ASCII码为30H
JL NEXT ;小于'0'等于
CMP AH,39H ;9的ASCII码为39H
JG ABC
INC DH; 数字个数加1
JMP NEXT
ABC:CMP AH,41H ;A的ASCII码!
JL NEXT ;小于'A'转
CMP AH,5AH ;Z为5AH
JG NEXT
INC DL ;字母个数加1
NEXT:INC BX ;数组地址加1
DEC CH ;计数减1
JNZ LP ;JNZ不等于
mov al,dh
or al,30h
mov num,al;
mov al,dl
or al,30h
MOV NUM+1,al ;字母的个数送入内存单元
MOV AH,BUF
SUB AH,DH ;N-DH-DL=其它字符的个数
SUB AH,DL ; ..... 数字的个数
or ah,30h
MOV NUM+2,AH; 其它字符个数送入内存单元
mov num+3,'$'
mov dx,offset num
mov ah,9
int 21h
MOV AH,4CH
INT 21H
CODES ENDS
END START