汇编语言编程,接收从键盘输入的字符,以CTR+C 结束,并将其中的小写字母转变为大写字母,然后在屏幕上显示

你们看我写的对吗?
DATA SEGMENT
MESS1 DB 'INPUT: ',13,10,'$'
MESS2 DB 'OUTPUT:',13,10,'$'
BUF DB 20
BUF1 DB ?
BUF2 DB 20 DUP(?)
COUNT EQU $-BUF
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,0
LEA DX,MESS1
MOV AH,09H
INT 21H
MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H
MOV CX,COUNT

LOOP1:MOV AL,BUF[SI]
CMP AL,61H
JBE NEXT
CMP AL,7AH
JGE NEXT
SUB AL,20H
MOV BUF[SI],AL

NEXT: INC SI
LOOP LOOP1
LEA DX,MESS1
MOV AH,09H
INT 21H
MOV DX,OFFSET BUF
MOV AH,09H
INT 21H
MOV AX,4CH
INT 21H
CODE ENDS
END START

问题非常多:
1. 首先题目就有问题,不可能“接收从键盘输入的字符,以CTR+C 结束”。对于命令提示符来说,按下CTRL+C,就会强行退出这个程序,所以不可能以CTRL+C结束的。应该是按回车结束输入。
2. DATA里有中文标点符号。
3. 输入字符后,按下回车,在C语言里运行的时候会自动换行,但是在汇编里不会,所以你要自己换行。
4. 用MOV AH, 0AH; INT 21H中断输入后,输入的有效字符数存放在BUF1单元里,所以循环的时候应该把CX设置为BUF1单元里的值,而不是COUNT
5. 输入的有效字符从BUF2单元开始存储,所以做大小写转换的时候,应该从BUF2单元开始,而不应该从BUF单元开始
6. 61H和7AH都是小写字母,所以跳转指令中不应该有E。同时,有符号、无符号不要混用,所以JBE改为JB,JGE改为JA。
7. 输入字符时,是以回车符作为结束;而输出字符时,是以'$'作为结束,所以对输入的字符,你要把最后一个回车符转为‘$'。
修改后的程序如下:
DATA SEGMENT
MESS1 DB 'INPUT: ',13,10,'$'
NEWLINEDB 13, 10, '$' ;这行是专门用来换行的
MESS2 DB 'OUTPUT:',13,10,'$'
BUF DB 20
BUF1 DB ?
BUF2 DB 20 DUP(?)
COUNT EQU $-BUF
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI, 0
LEA DX,MESS1
MOV AH,09H
INT 21H
MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H

LEA DX, NEWLINE ;专门用来换行
MOV AH, 9
INT 21H

MOV CL, BUF1
MOV CH, 0 ;BUF1单元中存放的是有效输入字符数

LOOP1:MOV AL,BUF2[SI] ;从BUF2单元开始才是有效字符
CMP AL,61H
JB NEXT ;JBE改为JB
CMP AL,7AH
JA NEXT ;JGE改为JA
SUB AL,20H
MOV BUF2[SI],AL ;从BUF2单元开始才是有效字符

NEXT: INC SI
LOOP LOOP1
MOV BUF2[SI], '$' ;循环结束,把当前的字符修改为'$'

LEA DX,MESS2
MOV AH,09H
INT 21H

MOV DX,OFFSET BUF2 ;从BUF2单元开始才是有效字符
MOV AH,09H
INT 21H

MOV AH,4CH
INT 21H
CODE ENDS
END START
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-17
有些小问题。可以实现输入若干字符直到^c,只是需要使用01H功能调用。下面是改正后的程序:
DATA SEGMENT
MESS1 DB 'INPUT: ',13,10,'$'
MESS2 DB 'OUTPUT:',13,10,'$'
BUF2 DB 80 DUP(?)
COUNT EQU $-BUF
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,0
LEA DX,MESS1
MOV AH,09H
INT 21H
MOV BX,OFFSET BUF2
MOV CX,0
NEXT1:
MOV AH,01H
INT 21H
CMP AL,03H ;CTRL+C
JE NEXT2
INC CX
MOV [BX],AL
INC BX
JMP NEXT1
NEXT2:
MOV AL,BUF2[SI]
CMP AL,61H
JB NEXT3
CMP AL,7AH
JG NEXT3
SUB AL,20H
MOV BUF2[SI],AL

NEXT3: INC SI
LOOP NEXT2
MOV BUF2[SI],'$'
LEA DX,MESS2
MOV AH,09H
INT 21H
MOV DX,OFFSET BUF2
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START

汇编语言编程,接收从键盘输入的字符,以CTR+C 结束,并将其中的小写字母转...
1. 首先题目就有问题,不可能“接收从键盘输入的字符,以CTR+C 结束”。对于命令提示符来说,按下CTRL+C,就会强行退出这个程序,所以不可能以CTRL+C结束的。应该是按回车结束输入。2. DATA里有中文标点符号。3. 输入字符后,按下回车,在C语言里运行的时候会自动换行,但是在汇编里不会,所以你要...

网络连接的问题
FOR \/参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数,如:%i ,而指定一个变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于 %I)。 批处理每次能处理的变量从%0—%9共10个,其中%0默认给批处理文件名使用,%1默认为使用此批处理时输入...

DOS 中的符号是什么意思 比如% $都是做什么的?急求答案谢谢高手_百度...
tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exe c:\\server.exe 登陆后,将“IP”的server.exe下载到目标主机c:\\server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送文本文件模式)进行传送 tftp -i 对方IP put c:\\server.exe 登陆后,上传本地c:\\server....

急求大学的PASCAL语言试卷
( 8) 在Pascal 语言中不能用read 过程直接从键盘输入一个集合. 下面的过程readset 可实现这一目的.其中t1的类型是t1=SET OF 'A'..'Z';readset的作用是从键盘接收用[] 括起的大写字母,并放入集合变量a中,而滤去其它字符,遇到字符'] '时结束.若输入的 第一个字符不是'[',则a被置为空集,并输出'error...

现在常用的DOS命令都有那些呀,还有它的主要作用是什么?请高手帮忙...
3.格式:FC[盘符:][路径名]〈文件名〉[盘符:][路径名][文件名][\/A][\/B][\/C][\/N] 4.使用说明: (1)选用\/A参数,为ASCII码比较模式; (2)选用\/B参数,为二进制比较模式; (3)选用\/C参数,将大小写字符看成是相同的字符。 (4)选用\/N参数,在ASCII码比较方式下,显示相异处的行号。 (六)ATTRIB——...

电脑键盘上的按键分别都是什么键?都是干嘛用的?
这个就是电脑上键盘所有键的功能。 CTRL组合键 Ctrl + A 全选 Ctrl + B 整理 收藏夹 Ctrl + C 复制 Ctrl + D 删除\/添加收藏 (在Word中是修改选定字符格式,在IE及傲游中是保存为收藏) Ctrl + E 搜索助理 在Word中是段落居中 Ctrl + F 查找 Ctrl+ G 在Word中是定位 Ctrl + H 历史记录 在Word中是...

运行里 cmd 等等里 常要用的密令有那些...
telnet 在本机上直接键入telnet 将进入本机的telnet copy 路径文件名1 路径文件名2 \/y 复制文件1到指定的目录为文件2,用参数\/y就同时取消确认你要改写一份现存目录文件 copy c:srv.exe ipadmin$ 复制本地c:srv.exe到对方的admin下 cppy 1st.jpg\/b+2st.txt\/a 3st.jpg 将2st.txt的内容藏身到1st.jpg...

电脑键盘怎么使用,各键有什么功能?
详情请查看视频回答

电脑的键盘代表的功能
DVORAK式键盘布局原则是:一、尽量让左右手交替来击打键盘,避免单手连击;二、将越排击键平均移动距离尽量缩短;三、将最常用到的字母排列在导键的位置上。 Windows中已经内置了对“DVORAK”键盘的支持,点击“控制面板-键盘”,进入“输入法区域设置”选项,接着单击“添加”按钮,将“输入法区域设置”设置为“英语(...

常用的电脑操作小技巧
四、禁用键盘上的win键.1、在微软小娜搜索栏中输入【regedit】后,按回车键进入注册表编辑器2、找到以下路径:HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\Advanced3、在【advanced】文件中【新建】-【字符串值】,命名文件为【DisabledHotkeys】,如图:4、在【DisabledHotkeys】中...

相似回答