问题描述
- enum8086汇编语言问题求助
- 题目:包含任意字符、以0结尾的字符串中的小写字母转换成大写字母。
预期:将不是小写字母的直接进行显示,是小写字母的转换后显示
问题:在输出字符时未输出第一个字符后就停止
**
编译工具:masm dosbox
代码:DATA SEGMENT
STRING DB 0DH0AH 'iamAstudent''0'
DATA ENDS
;------------------------------
PROGRNAM SEGMENT
ASSUME DS:DATACS:PROGRNAM
PUSH DS
XOR AXAXMOV AXDATA
MOV DSAX
LEA SISTRING
PUSH SIBEGIN: MOV AL[SI] ;判断是否为小写字母并进行转换
CMP AL0
JE RETURNCMP AL'a'
JB PRINT
CMP AL'z'
JA PRINT ;如果不是小写字母直接进行输出
SUB AL20H
MOV [SI]AL
PRINT:PUSH DS ;将字母进行输出
MOV AH2
MOV AL[SI]
MOV DLAL
INT 21H
POP DSN:INC SI
JMP BEGINRETURN:RET
POP SI
POP DS
PROGRNAM ENDS
END BEGIN
解决方案
assume cs:codeds:data
data segment
h1 db 'jhkhJHkJjjsKJ'0
data ends
code segment
start:mov axdata
mov dsax
mov bx0
mov cx0
s1:mov cl[bx]
jcxz s5
cmp cl'Z'
ja s2
s3:mov ah02h
mov dlcl
int 21h
inc bx
jmp s1
s2:sub cl20h
jmp s3
s5:mov ax4c00h
int 21h
code ends
end start
按照你给的思路写的能处理任意长度的字符串!
这个程序没有延时你自己写一个吧
解决方案二:
怎么不换个思路先转小写在显示
解决方案三:
不知道你写的什么开头保存数据段干什么?