用汇编语言试编写程序,从键盘输入字符以回车结束,统计输入的字符个数,并显示输入的字符和字符个数
终于搞定了,你看看应该没什么问题
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
;----------------------------------
...8086汇编语言编写程序 编写程序实现:将从键盘输入的小写字母转换成大...
data ends ;--- code segment assume cs:code,ds:data start :push ds mov ax,0 push ax mov ax,data mov ds,ax lea bx ,chars mov si,0 mov ch,0 ;---输入字符子程序 scanf:mov ah,1 int 21h cmp al,0dh jz crt cmp al,61h jnb L1 ;al>='a'mov [bx],al inc bx inc ...
汇编语言程度题:从键盘上输入字符0~9,要求从屏幕上输出其ASCII值(使用...
AcceptNum:LEA DX,Accept_Num ;提示输入一个1位数字符串地址 Call Get_Num ;从键盘接受一个数字 CMP Exit_Mark,1 JZ Exit_Proc ;若退出标志置位,则结束程序 MOV DigASCII,AL ;保存这个1位数 AND AL,0FH LEA BX,ASCII_Tab XLAT CBW MOV CX,4 SHL AX,CL SHR AL,CL OR AX,3030h XCHG ...
汇编程序从键盘输入一个字符,判断该字符是小写字母、大写字母、数字或其...
为防抽,加一句中文:程序如下:dseg segment msglf db 0ah, 0dh, '$'msgup db 'a big character.', 0ah, 0dh, '$'msglo db 'a small character.', 0ah, 0dh, '$'msgnum db 'a digit characgter.', 0ah, 0dh, '$'msgot db 'other character.', 0ah, 0dh, '$'dseg ...
如何编写一个汇编程序,要求“从键盘接收一个四位的16进制数,并在终端上...
编写一个汇编程序,可以从键盘接收一个四位的16进制数,并将其转换为二进制数在终端上显示,其实质上是实现了一个简单的数值转换功能。为了完成这一任务,我们需要在汇编语言中定义一个循环结构,用于接收用户输入的16进制字符,并将其转换为相应的数值。接下来,我们还需要编写一个转换算法,将这个数值...
汇编语言:从键盘输入字符,以回车键结束,将字符串中包含的字母输出到屏...
CODE SEGMENT ASSUME CS:CODE START: JMP BBB MSG1 DB 'please input: $' STR0 DB 255 STR1 DB ? STR2 DB 255 DUP('$') ALPHA0 DB 13,10 ALPHA DB 255 DUP('$') NUMBER0 DB 13,10 NUMBER DB 255 DUP...
编写汇编语言程序段:从键盘输入一个字符串“please input a number...
buff db 255 dup(?)bbb: push cs pop ds push cs pop es lea dx, data mov ah,10 int 21h ; 从键盘输入字符串,字符串的字符个数在n中,串的开始地址为buff首地址 ... mov ah,4ch int 21hcode ends end start ...
用8086汇编语言编写程序,从键盘输入一段字符,以#结束,统计其中数字,字母...
为了简便,直接使用了21中断的输入字符串子功能,即使你不输入#作为结束符,也可以使用。统计时,则将'#'后面的字符忽略正确的作法,是调用21中断的1号子功能,每次读取一个字符,直到读取到'#'为止。这个修改很简单,我就不再写了。data segment buf db 255 ; db ? db 255 dup('$') ...
汇编语言,从键盘输入一字符串
mov [si],al ;存入原字串缓冲区 Q3:inc dh ;字母和其它字符计数器+1 Q4:inc si ;SI 指向下一字符 jmp Q1 ;处理下一字符 Q5:mov byte ptr [si],'$' ;添加串结束标记 or dh,dh ;如DH=0,则该串为纯数字串 jz Q7 ;转显示 Q6:or dl,dl ;如DL=0,则该串中无数字0-9 jz Q7 ;...
求答案:试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母...
NAME TURN DSEG SEGMENT A DB 'PLEASE INPUT (a~z):','$'B DB 0AH,0DH,'$'DSEG ENDS SSEG SEGMENT STACK DB 90H DUP(?)SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV DX,OFFSET A\/\/\/提示输入 MOV AH,09H INT 21H MOV AH,01H I...
用汇编语言在键盘输入一个字符串,并将其从左向右滚动显示,求完整...
ASSUME CS:CODE, DS:DATA DATA SEGMENT MSG1 DB 13, 10, 'Please input string: ', 13, 10, '$'IN_MAX DB 8 IN_N DB ?IN_BUF DB 10 DUP(?)MSG2 DB 90 DUP('$')DATA ENDS CODE SEGMENT START:MOV AX, DATA MOV DS, AX ;--- LEA DX, ...