用8086汇编语言编写程序键盘输入一段字符以#结束,统计其中数字、字母、空格的个数是多少

用8086汇编语言编写程序键盘输入一段字符以#结束,统计其中数字、字母、空格的个数是多少,第1张

stack segment stack

byte 256 dup(0)

stack ends

data segment

C1 dw 0 ;空格

C2 dw 0 ;数字数

C3 dw 0 ;字母

C4 dw 0 ;其它字符数

BUFF db 64, 0, 64 dup() ;接收输入缓冲区,BUFF[0]存储缓冲区大小,BUFF[1]存储实际输入数,BUFF[2]开始为输入的数据

SHEX DB '0123456789ABCDEF$'

MSG1 db 13,10,'space: $'

MSG2 db 13,10,'number: $'

MSG3 db 13,10,'alpha: $'

MSG4 db 13,10,'other: $'

MSG5 db 'input your data, end to input #', 13, 10, '$'

data ends

code segment

assume cs:code,ss:stack,ds:data

START:

mov ax,data

mov ds,ax

mov ax,stack

mov ss,ax

call GetInputData;

call CountInputData;

;输出空格数

mov dx, offset MSG1

mov ax, C1

call PrintLen

;输出数字数

mov dx, offset MSG2

mov ax, C2

call PrintLen

;输出字母数

mov dx, offset MSG3

mov ax, C3

call PrintLen

;输出其他数

mov dx, offset MSG4

mov ax, C4

call PrintLen

PROCEXIT:

; 程序退出

mov ax,4c00h

int 21h

;打印出长度,长度保存在AX里, DX里存储提示信息地址

PrintLen proc near

push ax

mov ah,9h

int 21h

pop ax

mov cx,4

PRINTLOOP:

rol ax,1

rol ax,1

rol ax,1

rol ax,1

push ax

mov dl,al

and dl,0FH

mov bx, offset SHEX

add bl,dl

mov dl, byte ptr [bx]

mov ah,2

int 21h

pop ax

loop PRINTLOOP

ret

PrintLen endp

CountInputData proc near

mov ch,0

mov cl, byte ptr[BUFF+1]

mov si, offset BUFF+2

MYLOOP:

mov al, [si]

inc si

cmp al,20h ;' '空格

je CCOUNT1

cmp al, '0' ;'0'

jl CCOUNT4

cmp al, '9' ;'9'

jle CCOUNT2

cmp al, 'A' ;'A'

jl CCOUNT4

cmp al, 'Z' ;'Z'

jle CCOUNT3

cmp al, 'a' ;'a'

jl CCOUNT4

cmp al, 'z' ;'z'

jle CCOUNT3

CCOUNT4:

inc C4

jmp NEXTLOOP

; 空格

CCOUNT1:

inc C1

jmp NEXTLOOP

; 数字

CCOUNT2:

inc C2

jmp NEXTLOOP

; 字母

CCOUNT3:

inc C3

jmp NEXTLOOP

NEXTLOOP:

loop MYLOOP

ret

CountInputData endp

;获取输出数据,输入数据保存在BUFF里,个数

GetInputData proc near

mov dx, offset MSG5

mov ah, 9h

int 21h

mov ch,0

mov cl,BUFF

lea bx,BUFF+2;

INPUTLOOP:

mov ah,1

int 21h

cmp al, '#'

jz EXITINPUT

cmp al, 13 ;跳过回车符

jz INPUTLOOP

cmp al, 10 ;跳过换行符

jz INPUTLOOP

inc byte ptr[BUFF+1]

mov byte ptr[bx], al

inc bx

loop INPUTLOOP

EXITINPUT:

ret

GetInputData endp

code ends

end START

;======================

DISP_STR MACRO X ;宏定义

MOV DX, OFFSET X

MOV AH, 9

INT 21H

ENDM

;----------------------

DATA SEGMENT ;数据段

MSG1 DB 13, 10, 'Please Input : $'

MSG3 DB 13, 10, 'The HEX is : $'

x DW ;存放新输入数据

DATA ENDS

;----------------------

CODE SEGMENT ;代码段

ASSUME CS: CODE, DS: DATA

START:

MOV AX, DATA

MOV DS, AX

;--------------------------------

IN_LOOP:

DISP_STR MSG1 ;宏调用,提示 Please Input :

;--------------------------------

MOV x, 0 ;数据清零

_INX:

MOV AH, 1 ;输入字符

INT 21H

;--------------------------------

CMP AL, 13 ;回车

JE _IN_END ;是则结束输入

CMP AL, '0'

JB IN_LOOP ;小于'0',不是数字

CMP AL, '9'

JA IN_LOOP ;大于'9',不是数字

SUB AL, '0'

MOV CL, AL

MOV CH, 0

MOV AX, x

MOV BX, 10 ;老数据乘以10

MUL BX

ADD AX, CX ;加上新数据

MOV x, AX ;保存

CMP AX, 99

JA IN_LOOP

JMP _INX

;--------------------------------

_IN_END:

DISP_STR MSG3 ;宏调用,提示 The HEX is :

MOV AX, x

MOV BX, 16

MOV CX, 0

D_1:MOV DX, 0

DIV BX

ADD DL, '0'

CMP DL, 3AH

JB ZZZ

ADD DL, 7

ZZZ:

PUSH DX

INC CX

CMP AX, 0

JNE D_1

MOV AH, 2

D_2:POP DX

INT 21H

LOOP D_2

;--------------------------------

MOV AH, 4CH

INT 21H

;--------------------------------

CODE ENDS

END START

;=====================

以上就是关于用8086汇编语言编写程序键盘输入一段字符以#结束,统计其中数字、字母、空格的个数是多少全部的内容,包括:用8086汇编语言编写程序键盘输入一段字符以#结束,统计其中数字、字母、空格的个数是多少、用8086汇编语言编写程序,接受从键盘上输入的一个两位十进制数字,这个数经过BCD码处理,以十六进制显示出、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10167198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存