汇编中,怎么显示不出数字或字符个数。已编译成功!

来源:百度知道 编辑:UC知道 时间:2024/05/23 11:38:20
DATAS SEGMENT
;此处输入数据段代码
BUF DB 7
DB 01H,38H,47H,90H,33H,09H,76H;01 ,8,G, ,3, ,v
NUM DB 3 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 NUM,DH ;数字的个数送入内存单元
MOV NUM+1,DL ;字母的个数送入内存单元
MOV AH,BUF

你程序里没有输出到显示器的语句,我帮你改了下。调用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
M