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

作者&投稿:辕坚 (若有异议请与网页底部的电邮联系)
用汇编语言试编写程序,从键盘输入字符以回车结束,统计输入的字符个数,并显示输入的字符和字符个数~

;----------------------------------
DATAS SEGMENT
IN_1 DB 100
N1 DB ?
BUFF DB 100 DUP('$')
MSG1 DB 10, 13, 'Please Input STR : $'
MSG2 DB 10, 13, 'The STR Long is : $'
CRLF DB 10, 13, '$'

DATAS ENDS
;----------------------------------
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS
START:
MOV AX, DATAS
MOV DS, AX

MOV DX, OFFSET MSG1 ;提示输入.
MOV AH, 09H
INT 21H

MOV DX, OFFSET IN_1 ;接收键盘输入.
MOV AH, 0AH
INT 21H

MOV DX, OFFSET CRLF ;回车换行.
MOV AH, 09H
INT 21H

MOV DX, OFFSET BUFF ;输出原字符串.
MOV AH, 09H
INT 21H

MOV DX, OFFSET MSG2 ;提示长度.
MOV AH, 09H
INT 21H
;----------------------------------
MOV AL, N1
MOV BL, 10
MOV CX, 0
L1:
MOV AH, 0
DIV BL
PUSH AX
INC CX
AND AL, AL
JNZ L1
L2:
POP DX
MOV DL, DH
ADD DL, 48
MOV AH, 2
INT 21H
LOOP L2
;----------------------------------
MOV AH, 4CH
INT 21H
CODES ENDS

END START
;----------------------------------

mov cx,0 ;小写字母计数器
nextc:
mov ah,1 ;设功能号,接收键盘字符,回显
int 21h ;dos中断
cmp al,13h ;识别回车,有就退出
je done
cmp al,'a'
jb nextc
cmp al,'z'
ja nextc
inc cx ;找到一个小写字母
jmp nextc

done:
;以下显示CX的数值
STD
mov bx,10 ;十进制
mov di,offset buf+12 ; 要倒序存放
mov al,'$'
STOSB ;置结束符
mov ax,cx ;转到ax 中
cntdiv:
mov dx,0
div bx ;除以10
xchg dx,ax ;现在余数在AL中
or al,30h ;变为'0' .. '9'
STOSB ;存一位,DI减1
xchg dx,ax ;商 在 ax中
and ax,ax
jne cntdiv
mov al,0ah ;准备写入回车,好看些
STOSB
mov al,0dh
STOSB

mov dx,di
inc dx
mov ah,9
int 21h ;显示内容:个数

mov ax,4c00h
int 21h ;退出程序

buf db 16 dup(0)

剩下的自己完成,动动手,有好处
cx只能计 65535个数,不要超过它就可以了。

为了简便,直接使用了21中断的输入字符串子功能,即使你不输入#作为结束符,也可以使用。
统计时,则将'#'后面的字符忽略
正确的作法,是调用21中断的1号子功能,每次读取一个字符,直到读取到'#'为止。
这个修改很简单,我就不再写了。

data segment
  buf db 255 ;
        db ?
            db 255 dup('$')
    c1 dw 0 ;spacebar
    c2 dw 0 ;digital number
    c3 dw 0 ;alphabet
    m1 db 0dh, 0ah, "Spacebar number:$"
    m2 db 0dh, 0ah, "Digital number:$"
    m3 db 0dh, 0ah, "Alphabet number:$"
data ends

code segment
        assume cs:code, ds:data
start:
        mov ax, data
        mov ds, ax
        mov es, ax

;code start here
; read string
        lea dx, buf
        mov ah,0ah
        int 21h

;
    xor cx, cx
        mov cl, buf+1
        mov si, 0
Loop1:
        mov al, buf[si+2]
        cmp al, '#'
        jz  lopend
        cmp al, 20h
        jz space
        cmp al, '0'
        jb alphabet
        cmp al, '9'
        ja alphabet
        inc c2      ;digital number
        jmp lop
space:
        inc c1      ;spacebar
        jmp lop
alphabet:
        inc c3
lop:
        inc si
        loop loop1

lopend:

; print result
        lea dx, m1
        mov ah, 9
        int 21h

        mov ax, c1
        call print

        lea dx, m2
        mov ah, 9
        int 21h

        mov ax, c2
        call print

        lea dx, m3
        mov ah,9
        int 21h

        mov ax, c3
        call print

;exit to OS
        mov ah,4ch
        int 21h

print proc near
        mov bx, 10
        xor cx, cx
Q0:
        xor dx, dx
        div bx
        or dx, 0e30h
        push dx
        inc cx
        cmp ax, 0
        jnz Q0
Q1:
        pop ax
        int 10h
        loop Q1
        ret
print endp

code ends

end start


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


用8086汇编语言编写程序,接受从键盘上输入的一个两位十进制数字,这个数...
做而论道 采纳率:64% 擅长: 汇编语言 其他编程语言 编程语言 工程技术科学 嵌入式 其他回答 学汇编,要用到哪些软件 zpue1234 | 发布于2012-06-01 举报| 评论(1) 0 1 为您推荐: 汇编语言程序设计pdf 汇编语言小程序100例 关于汇编语言程序 8086 汇编语言 8086汇编语言解释 8086汇编语言是什么 ...

用8086汇编语言编写程序键盘输入一段字符以#结束,统计其中数字、字母...
stacksegmentstack\\x0d\\x0abyte256dup(0)\\x0d\\x0astackends\\x0d\\x0a\\x0d\\x0adatasegment\\x0d\\x0aC1dw0;空格数\\x0d\\x0aC2dw0;数字数\\x0d\\x0aC3dw0;字母数\\x0d\\x0aC4dw0;其它字符数\\x0d\\x0aBUFFdb64,0,64dup(?);接收输入缓冲区,BUFF[0]存储缓冲区大小,BUFF[1]存储实际输入数,B...

8088·8086汇编语言程序设计内容简介
汇编语言是一种直接与计算机硬件交互的语言,特别适合于微型计算机系统的开发和过程控制。在当今,8088\/8086和80×86系统计算机被广泛应用,因此,《8088\/8086汇编语言程序设计》这部教材将焦点放在了这一系统上,作为学习的基础内容。该书旨在提供全面的教学,特别强调了由易到难的学习路径和实例驱动的方法。...

8086汇编开发(持续完善)
汇编学习的初衷是为了理解Linux-0.0.0的汇编代码。通过研读8086和80386手册,深感总结归纳的重要性,因此撰写此篇,旨在介绍如何在8086架构上进行汇编程序的编写,不涉及任何扩展学习内容。文章将涵盖以下部分:环境搭建、汇编语法、寄存器寻址模式、栈操作、中断与异常处理。在搭建环境时,以使用ArchLinux为例...

8088·8086汇编语言程序设计目录
首先,第一章《概论》涵盖了汇编语言的基本概念。在第一节中,通过引言引导读者了解汇编语言的起源和重要性;第二节则深入讲解汇编语言程序设计的原理;第三节介绍了汇编程序的基本构成和使用。接着,进入第二章,8088\/8086系统结构是理解汇编程序设计的关键。第一节详细描述了8088微处理器的硬件结构,第...

8086汇编基础知识总结
8086执行指令的过程涉及指令读取、译码、执行和结果写回。8086对字的存储采用小端模式,即高字节在高地址,低字节在低地址。物理地址由16位的段地址和16位的偏移地址合成。数据传送指令包括MOV、PUSH、POP、POPF、PUSHF。其中,MOV指令用于数据移动,PUSH、POP指令用于栈操作,POPF、PUSHF指令用于标志寄存器的...

使用8086汇编语言编写程序实现:将从键盘输入的小写字母转换成大写字母...
data\\x0d\\x0amov ds,ax\\x0d\\x0alea bx ,chars\\x0d\\x0amov si,0\\x0d\\x0amov ch,0\\x0d\\x0a;---输入字符子程序\\x0d\\x0ascanf:\\x0d\\x0amov ah,1\\x0d\\x0aint 21h\\x0d\\x0acmp al,0dh\\x0d\\x0ajz crt\\x0d\\x0acmp al,61h\\x0d\\x0ajnb L1 ;al>='a'\\x...

求一个8086汇编语言程序!急!!! 要求:提示输入x,y,z的值,并显示_百度知 ...
1 add ax,cx call dispnum mov ah,4ch int 21h msg db 10,13,'please input X,Y,Z(word type):','$'; 键盘输入数值数组子程序(数组名为array,元素个数存放在num中)inputnum proc near ; 输入的数据以一个空格分隔,以回车符结束输入 lea di,array ;将数...

8086\/8088汇编语言编一程序
Shift键: VK_SHIFT ($10)Ctrl键: VK_CONTROL (17)Alt键: VK_MENU (18)空格键: VK_SPACE ($20\/32)退格键: VK_BACK (8)左徽标键: VK_LWIN (91)右徽标键: VK_LWIN (92)鼠标右键快捷键:VK_APPS (93)Insert键: VK_INSERT (45)Home键: VK_HOME (36)Page Up: VK_PRIOR ...

8086的编程题(使用汇编语言)
1、编两个通用过程完成将AX中存放的二进制数转换成压缩型BCD码以及将BCD码转换成二进制数。; 本程序通过编译,运行正确。Code Segment Assume CS:Code,DS:Code ; --- ; 功能:将AX中的二进制数转换成压缩型BCD码 ; 入口:AX=16位二进制数(因为压缩BCD码最大为:9999H,所以,AX的二进制...

凌源市19728826389: 用8086汇编语言编写一个输入字符串的程序 -
缪怀心元: 代码如下:DSEG SEGMENT SPACES DB 20H, 20H, 20H, 20H, 24H LINE DB 0DH, 0AH, 24H DSEG ENDS SSEG SEGMENT PARA STACK e68a84e8a2ad62616964757a686964616f31333365656563DW 256 DUP(?) SSEG ENDS CSEG ...

凌源市19728826389: 用汇编语言 8086软件 从键盘输入字符串 (可能还有大写字母,小写字母,数字及空格) ,对该字符串进行处 -
缪怀心元: ;从键盘输入字符串 (可能还有大写字母,小写字母,数字及空格) ,;对该字符串进行处理,把大写字母变成小写字母,小写字母变成大写字母,去掉数字及空格,;然后再屏幕上显示该字符串;ASSUME CS:CC, DS:QQ QQ SEGMENT ...

凌源市19728826389: 用8086汇编语言写一个计算器程序.该程序输入的是10进制数.执行时,直接用键盘输入数字和运算符 -
缪怀心元: 1首先用中断10把计算器的图形界面显示出来 2调用读键盘功能,读入相关的数字和符合 3把输入状态分为第一数数据,运算符,第二数据,运算,显示,几个过程 4或者直接输入,然后用二数据运算法则分析输入的表达式,并计算结果 5显示出来

凌源市19728826389: 用8086汇编语言编写程序,实现如下功能:通过键盘输入10个学生成绩(小于100的整数),完成对成绩的排序,并按照降序显示出来. -
缪怀心元: DATA SEGMENT BLZ1 DB 50 DUP (0) BLZ2 DB 40,?,60 DUP (0),'$' MESSAGE DB "Please Input:",'$' HU DB 0DH,0AH,'$' DATA ENDS DUI SEGMENT STACK DB 100 (0) DUI ENDS CODE SEGMENT ASSUME CS:code,DS:data,SS:DUI ...

凌源市19728826389: 使用8086汇编语言编写程序实现:将从键盘输入的小写字母转换成大写字母输出.求程序流程图? -
缪怀心元: data segment chars db 200 dup(?) ;开辟200字节的缓冲区 data ends ;--------------------------------- code segment assume cs:code,ds:datastart : push ds mov ax,0 push ax mov ax,data mov ds,ax lea bx ,chars mov si,0 mov ch,0 ;----------------------...

凌源市19728826389: 急求8086汇编程序: 1、从键盘输入字符串,对串中的字母进行处理,统计字母数量,同时将大写转换为小写,小 -
缪怀心元: 之前回答的一个问题,只是少了统计数量的 .model small.stack 100h.databuf label bytemax_len db...

凌源市19728826389: [汇编语言]由键盘输入任意字符串 然后显示出来 -
缪怀心元: data segment keyboard db 256,?,256 dup (?) data ends code segment assume cs:code,ds:data main proc far mov ax,data mov ds,ax lea dx,keyboard mov ah,0ah;输入字符串 int 21h lea di,keyboard mov cl,[di+1];取出实际输入字符的个数 mov ...

凌源市19728826389: 用汇编语言编写程序,从键盘接收一个字符,若该字符是大写字母显示"upper"若是小写字母显示"lower" -
缪怀心元: ;------------------------------------ PRINT MACRO PARA ; 定义一个显示字符串的宏LEA DX, PARAMOV AH, 9INT 21H ENDM ;------------------------------------ DSEG SEGMENTMSG_LOWER DB ' lower', 0DH, 0AH, 24HMSG_UPPER DB ' upper', 0...

凌源市19728826389: 从键盘输入一个字符串在下一行逆序输出用汇编语言如何实现 -
缪怀心元: 从键盘输入一个字符串在下一行逆序输出用汇编语言可用如下方法实现: ;汇编语言输入一串字符串,可以调用DOS功能中断INT 21H的06H功能. ;程序功能:输入一串字符,以回车符结束,输入字符串最大长度200字符; ; 输入结束在下一...

凌源市19728826389: 用8086的汇编语言编一个小程序:从键盘输入一个4*4的矩阵 -
缪怀心元: 我以前试过用数数的方式让它在3*3宫格里填数 结果用了四十多秒 接下来又用同样的计算方法用到4*4的宫格里 结果就是没反应了3*3用四十秒,4*4就要用几十年 这个宫格有填数公式,偶宫格和奇宫格的还不一样,具体是什么你再搜一下吧

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网