用汇编语言试编写程序,从键盘输入字符以回车结束,统计输入的字符个数,并显示输入的字符和字符个数

作者&投稿:荣满 (若有异议请与网页底部的电邮联系)
【汇编编程求助】通过键盘输入一串字符,以回车结束,统计并输出其中0和1的个数,在线等 用汇编语言编~

终于搞定了,你看看应该没什么问题
DATAS SEGMENT
STR DB "please input a string:$"
STR1 DB "0 numbers:$"
STR2 DB "1 numbers:$"
BUF DB 20
DB ?
DB 20 DUP (?)
CRLF DB 0AH,0DH,"$"
X DB 30H ;存储0的个数
Y DB 30H ;存储1的个数
DATAS ENDS

STACKS SEGMENT STACK
DB 200 DUP(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START: MOV AX,DATAS
MOV DS,AX
LEA DX,STR ;显示字符串
MOV AH,9
INT 21H
MOV AH,10 ;字符串输入
LEA DX,BUF
INT 21H
LEA DX,CRLF ;输出换行回车
MOV AH,9
INT 21H
MOV CL,BUF+1 ;第二个字节保存着字符个数
LEA SI,BUF+2 ;存储字符串的地址从第3个字节开始
DEC SI
INC CL
NEXT: DEC CL
INC SI
CMP CL,0
JE VIE
MOV DL,[SI]
CMP DL,30H
JE XX
CMP DL,31H
JE YY
JNZ NEXT
XX:INC X
JMP NEXT
YY:INC Y
JMP NEXT


VIE: LEA DX,STR1
MOV AH,9
INT 21H
;MOV BL,X
MOV DL,X
MOV AH,2
INT 21H

LEA DX,CRLF ;输出换行回车
MOV AH,9
INT 21H

LEA DX,STR2
MOV AH,9
INT 21H
;MOV BL,Y
MOV DL,Y
MOV AH,2
INT 21H

MOV AH,4CH
INT 21H
CODES ENDS
END START

本程序最多能输入255个字符包括回车,输出统计时,第一个数字是数字字符个数,第二个是字母,第三个是其它。
assume cs:code,ds:data
data segment
da1 db 255
da2 db ?
da3 db 255 dup (?)
data ends
stack segment stack
db 256 dup (?)
stack ends
code segment
start:
mov ax,data
mov ds,ax

lea dx,da1 ;输入字符串
mov ah,10
int 21h

lea bx,da3 ;统计字符串
xor cx,cx
xor ax,ax
xor dx,dx
mov cl,da2
again:
mov ah,[bx]
.if ah >= '0' && ah <= '9' ;数字,al加1
inc al
.elseif ah >= 'A' && ah <= 'Z' ;字母,dh加1
inc dh
.elseif ah >= 'a' && ah <= 'z'
inc dh
.else
inc dl ;其它,dl加1
.endif
inc bx
loop again

call putout ;输出数字个数
mov al,dh
call putout ;输出字母个数
mov al,dl
call putout ;输出其它字符个数
mov ax,4c00h
int 21h

putout: ;以16进制形式输出al中的数据
push bx
push dx
xor ah,ah
push ax

mov dl,13 ;换行
mov ah,2
int 21h
mov dl,10
mov ah,2
int 21h

pop ax
mov bl,16
div bl ;使高位与低位分离
.if al>9 ;转换成字符
add al,40h
.endif
add al,30h

.if ah>9
add ah,40h
.endif
add ah,30h

mov bl,ah ;保存低位

mov dl,al ;输出高位
mov ah,2
int 21h
mov dl,bl ;输出低位
mov ah,2
int 21h

pop dx
pop bx
ret

code ends
end start

;----------------------------------
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
;----------------------------------


...31H单元中(30H存放和的低字节)。!汇编语言 急!
用51单片机汇编语言:MOV A, #0AFH ADD A, #0B7H MOV 30H, A MOV A, #0 ADDC A, #0 MOV 31H, A END

用汇编语言试编写一段程序,内存单元连续存储3个数据,求出中间值,_百度...
DAT1 1000h:0 1,2,18h,34h,35h,36h,45h,0f0h DAT2 1000h:8 0ch,0,0dh,0,0fbh,0ffh COUNT=7 1000h:0eh 12h,0,78h,56h DAT3 1000h:12h 0,3,0,0,8,0,0,0

编一汇编程序
; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。Code Segment Assume CS:Code,DS:Code ; --- ; 功能:显示指定地址(Str_Addr)的字符串 ; 入口:; Str_Addr=字符串地址(要求在数据段); 用法: Output Str_Addr ; 用法举例:Output PromptStr Output MACRO Str_Addr...

试编写一个汇编语言程序 要求对键盘输入的小写字母
;;从键盘输入字符,;;若是 小写字母 显示"This is Lower case letters.";;若是其它字符不显示 CSEG SEGMENT ASSUME CS:CSEG,DS:CSEG MSG DB "This is Lower case letters."ORG 200H START:MOV AH,01H INT 21H CMP AL,61H JB NODSP CMP AL,7AH JA NODSP DSP:MOV AX,SEG MSG MOV DS...

试编写一汇编语言程序,要求从键盘接受一个四位的十六进制数,并在终端显...
BEGIN: MOV BX, 0 ;用于存放四位的16进制数 MOV CH, 4 MOV CL, 4 INPUT: SHL BX, CL ;将前面输入的数左移4位 MOV AH, 1 ;从键盘取数 INT 21H CMP AL, 30H ;<0吗?JB INPUT ;不是‘0~F’的数重新输入 CMP AL, 39H ;是‘0~9’吗?JA AF...

一个汇编程序 5.数制转换 试编写一汇编语言程序,要求从键盘接收一个四...
;从键盘接收一个四位的十进制数,并在终端上显示与它等值的二进制数 ;=== DATA SEGMENT STR1 DB 'INPUT A NUM: $'HEX DB 5 ;计划输入的字符个数(含回车符)NNN DB 0 ;存放实际输入的字符个数 DB 5 DUP(?)BIN DW ? ;输入数字的二进制形式的存放单元 E...

3、已知fosc=12M,试编写程序,利用T0工作方式1,使P1.0输出周期为2ms的方 ...
;打开定时器0中断 SETB TR0 ;打开定时器0 CLR P1.0 ;刚开始为低电平 SJMP $ ;等待中断 ;===T0中断服务子程序=== B_T0: CPL P1.0 MOV TH0,#0FCH ;定时1ms重设 MOV TL0,#18H RETI

试编写一个求2+4+8+16...+128的汇编语言程序
mov ax,2 mov dx,4 C1: ;循环开始前为2+4 add ax,dx shl dx,1 ;左移一次为*2 比如 4*2=8 8*2=16 16*2=32 cmp dx,128 jna C1 ;如果dx 等于或小于128 循环继续 mov ax,04c00h ;程序结束 int 21h 用nasm编译 ...

试编写一个汇编语言程序,要求依次输出ASCII码0---127对应的128个字符...
DATAS SEGMENT MSG DB 0,0,"H ","$"CR DB 13,10,"$"TAB1 DB "0123456789ABCDEF"DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKS START:MOV AX,DATAS MOV DS,AX MOV ES,AX MOV CX,127 MOV DL,0 MOV SI,OFFSET TAB1 MOV DI,...

用8086汇编语言编写一个输入字符串的程序
代码如下:DSEGSEGMENTSPACESDB 20H, 20H, 20H, 20H, 24HLINEDB0DH, 0AH, 24HDSEGENDSSSEGSEGMENT PARA STACKDW 256 DUP(?)SSEGENDSCSEGSEGMENTASSUME CS:CSEG,DS:DSEGBEGIN:MOV AX, DSEGMOV DS, AXLOOP1:MOV AH, 08HINT 21H; 判断回车键MOV DL, ALCMP DL, 0DHJNE LOOP3MOV DX, ...

革吉县19762024192: [汇编语言]由键盘输入任意字符串 然后显示出来 -
晁蚀益左: 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 ...

革吉县19762024192: 编写一个汇编程序,从键盘输入一个字符,并显示在屏幕上.需要源代码... -
晁蚀益左: 直接调中断即可. dseg segment msglf db 0ah, 0dh, '$' dseg endscseg segment assume cs:cseg, ds:dseg begin: mov ax, dseg mov ds, axmov ah, 1 int 21h mov bl, allea dx, msglf mov ah, 9 int 21hmov dl, bl mov ah, 2 int 21hmov ah, 4ch int 21h cseg ends end begin

革吉县19762024192: 用汇编语言编程实现从键盘输入一个字符带回显,并将键盘输入的那个字符在屏幕上换行显示出来 -
晁蚀益左: .MODEL SMALL .DATA .CODE START:MOV AX, @DATAMOV DS, AX MOV AH, 1INT 21H MOV BL, AL MOV DL, 13 ;回车MOV AH, 2INT 21HMOV DL, 10 ;换行INT 21H MOV DL, BL ;显示INT 21HMOV AH, 4CHINT 21HEND START

革吉县19762024192: 用汇编语言编程,从键盘输入字符串,并将大小写互换,然后显示 -
晁蚀益左: 问题非常多:1. 首先题目就有问题,不可能“接收从键盘输入的字符,以CTR+C 结束”.对于命令提示符来说,按下CTRL+C,就会强行退出这个程序,所以不可能以CTRL+C结束的.应该是按回车结束输入.2. DATA里有中文标点符号.3. ...

革吉县19762024192: 从键盘输入一个字符串在下一行逆序输出用汇编语言如何实现 -
晁蚀益左: 从键盘输入一个字符串在下一行逆序输出用汇编语言可用如下方法实现: ;汇编语言输入一串字符串,可以调用DOS功能中断INT 21H的06H功能. ;程序功能:输入一串字符,以回车符结束,输入字符串最大长度200字符; ; 输入结束在下一...

革吉县19762024192: 汇编怎样编写从键盘接收字符串的程序 -
晁蚀益左: DATAS SEGMENT STR DB"please input a string:$" BUF DB 20 ;这里的20为指定存放字符的个数(理论上的) DB ? ;这的?可变,实际存放字符的个数(系统自动计算) DB 20 DUP (?) ;这里的20是你在数据段开辟的空间 CRLF ...

革吉县19762024192: 编写汇编语言程序段:从键盘输入一个字符串“please input a number”存入BUFF -
晁蚀益左: code segmentassume cs:codeorg 100h start: jmp bbb data db 255 n db ? buff db 255 dup(?) bbb: push cspop dspush cspop eslea dx, datamov ah,10int 21h ; 从键盘输入字符串,字符串的字符个数在n中,串的开始地址为buff首地址...........mov ah,4chint 21h code endsend start

革吉县19762024192: 试编写一个汇编语言程序,从键盘输入一个字符,若该字符是大写字母,在屏幕上输出"upper"(不含双引号) -
晁蚀益左: ;------------------------------------ PRINT MACRO PARA ; 定义一个显示字符串的宏 LEA DX, PARA MOV AH, 9 INT 21H ENDM ;------------------------------------ DSEG SEGMENT MSG_LOWER DB ' lower', 0DH, 0AH, 24H MSG_UPPER DB ' upper', 0DH, ...

革吉县19762024192: 用汇编语言实现,从键盘输入任意字符(字母、数字、特殊符号等),并将其ASC2码值输出 -
晁蚀益左: code segment assume cs:code start:mov ah,01h int 21h mov cx,02h n:call der cmp dl,09h ja next add dl,30h mov ah,02h int 21h loop n nc:int 3h next:add dl,37h mov ah,02h int 21h loop n jmp nc der:push cx mov dl,00 mov cx,4 b:shl al,1 rcl dl,1 loop b pop cx ret code ends end start

革吉县19762024192: 用汇编语言编译一个程序\从键盘输入一个字符串将其每个字符的ASCII码显示在屏幕上 -
晁蚀益左: data segment parastr1 db 'one', '$'str2 db 'Two', '$'str3 db 'Three', '$'str4 db 'four', '$'str5 db 'five', '$'tab dw str1,str2,str3,str4,str5 data ends ssg segment stack dw 256 dup(?) ssg ends code segment para ...

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