![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
汇编语言初学者 自己东拼西凑的写了个程序 求大神帮忙调试一下
要求;编程将键盘随即输入的字符串中小写字母转换为大写字母并在字母间插入空格后在屏幕输出。要求:键盘输入,空格插入,显示输出分别由子程序完成DATASEGMENTinbuf...
要求; 编程将键盘随即输入的字符串中小写字母转换为大写字母并在字母间插入空格后在屏幕输出。要求:键盘输入,空格插入,显示输出分别由子程序完成
DATA SEGMENT
inbuf DB 100;可能输入的最大字符数
db 0;实际输入字符数
db 100 DUP;输入缓冲
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DX,AX
CALL A
MOV AH,0AH ;输入字符串的子程序
MOV DX,di
INT 21H
A:
MOV di OFFSET inbuf
ret
xor cx,cx
mov cl,[di+1]
lea si,[di+2]
next1:
cmp byte ptr[si],'a'
jb skip 1 ;小写转大写
cmp byte ptr[si],'z'
xor byte ptr[si],20h
mov [si],al
inc si
call t ;插入空格的子程序
inc si
t:
mov al,20h
mov [si],al
ret
skip1:
inc si
loop next1
call p
INT 21H
p:
mov dl,0ah ;输出子的程序
mov ah, 02h
ret
lea DX,[di+2]
MOV AH,09H
INT 21H
MOV AH,0
INT 16H
MOV AX,4C00H
INT 21H
CODE ENDS
END STERT 展开
DATA SEGMENT
inbuf DB 100;可能输入的最大字符数
db 0;实际输入字符数
db 100 DUP;输入缓冲
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DX,AX
CALL A
MOV AH,0AH ;输入字符串的子程序
MOV DX,di
INT 21H
A:
MOV di OFFSET inbuf
ret
xor cx,cx
mov cl,[di+1]
lea si,[di+2]
next1:
cmp byte ptr[si],'a'
jb skip 1 ;小写转大写
cmp byte ptr[si],'z'
xor byte ptr[si],20h
mov [si],al
inc si
call t ;插入空格的子程序
inc si
t:
mov al,20h
mov [si],al
ret
skip1:
inc si
loop next1
call p
INT 21H
p:
mov dl,0ah ;输出子的程序
mov ah, 02h
ret
lea DX,[di+2]
MOV AH,09H
INT 21H
MOV AH,0
INT 16H
MOV AX,4C00H
INT 21H
CODE ENDS
END STERT 展开
1个回答
展开全部
昨天遇到个一样的问题,给你参考一下。
DATAS SEGMENT
str db 20
db 0
db 20 dup (?)
str1 db 20 dup (?)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
call input ;输入
xor cx, cx
mov cl, str + 1
lea si,str + 2
lea di,str1
call insert ;插入
mov dl,0dh ;回车换行
mov ah,2
int 21h
mov dl,0ah
int 21h
lea dx,str1
call output ;输出
MOV AH,4CH
INT 21H
input proc
lea dx, str
mov ah, 10
int 21h
ret
input endp
insert proc
i1:
cmp byte ptr [si], 'a'
jb i2
cmp byte ptr [si], 'z'
ja i2
sub byte ptr [si], 32
i2:
mov al,[si]
mov [di],al
inc di
mov byte ptr [di], 20h
inc si
inc di
loop i1
mov byte ptr [di], '$'
ret
insert endp
output proc
mov ah,9
int 21h
ret
output endp
CODES ENDS
END START
DATAS SEGMENT
str db 20
db 0
db 20 dup (?)
str1 db 20 dup (?)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
call input ;输入
xor cx, cx
mov cl, str + 1
lea si,str + 2
lea di,str1
call insert ;插入
mov dl,0dh ;回车换行
mov ah,2
int 21h
mov dl,0ah
int 21h
lea dx,str1
call output ;输出
MOV AH,4CH
INT 21H
input proc
lea dx, str
mov ah, 10
int 21h
ret
input endp
insert proc
i1:
cmp byte ptr [si], 'a'
jb i2
cmp byte ptr [si], 'z'
ja i2
sub byte ptr [si], 32
i2:
mov al,[si]
mov [di],al
inc di
mov byte ptr [di], 20h
inc si
inc di
loop i1
mov byte ptr [di], '$'
ret
insert endp
output proc
mov ah,9
int 21h
ret
output endp
CODES ENDS
END START
追问
真的万分感谢您 虽然还是想知道自己的程序问题在哪 自己在慢慢解决把 您看我先采纳您 有什么不懂得地方私信您可以吗?
追答
可以.
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询