![]() |
#2
crazypenguin2008-10-12 12:30
自己搞定了
![]() 输入字母串,全部转化为大写 DATA SEGMENT BUF DB 30,?,30 DUP(?) DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV DX,OFFSET BUF ;初始化DX MOV BX,SEG BUF ;初始化 MOV DS,BX ;DS MOV AH,0AH ;10号 INT 21H ;调用 MOV BX,DX ;初始化CX(实际输入字符个数,即循环次数), MOV BL,[BX+1] ;由于使用MOV WORD PTR[CX],[DX+1]语法错误, MOV CL,BL ;需采用BX, MOV CH,00H ;因此显得有点繁杂。 MOV SI,DX ;利用SI来代替DX,保护DX ADD SI,2 ;SI指向第一个输入的字符内存单元 LOOP1: MOV BL,[SI] ;将SI指向的字符的16位ACSII码 CMP BL,5AH ;和5AH('Z')比较 JGE NEXT1 ;大于5AH(即为小写字母时)则跳到NEXT1 INC SI ;SI指向下一个字符的内存单元 LOOP LOOP1 ;循环LOOP1 NEXT1: MOV AL,20H ;将小写字母的16位ACSII码 SUB [SI],AL ;减去20H(小写字母比大写字母的ACSII码大20H) ;转换后的大写字母覆盖回对应内存单元 INC SI ;SI指向下一个字符的内存单元 LOOP LOOP1 ;循环LOOP1 MOV BL,24H ;将‘$’(9号调用需要字符串以此字符结尾) MOV [SI],BL ;存进输入字符串紧接的内存单元 ADD DX,2 MOV AH,9 ;9号 INT 21H ;调用 MOV AH,4CH ;返回 INT 21H ;DOS CODE ENDS END START |
编译没问题,但是dos下运行exe时,只调用了10号字符串输入,而没有调用9号字符串输出;DEBUG下,T命令执行到输入时会停住不动了,很奇怪
DATA SEGMENT
BUF DB 30,?,30 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV DX,OFFSET BUF ;初始化DX
MOV BX,SEG BUF ;初始化
MOV DS,BX ;DS
MOV AH,0AH ;10号
INT 21H ;调用
MOV BX,DX ;初始化CX(实际输入字符个数,即循环次数),
MOV BL,[BX+1] ;由于使用MOV WORD PTR[CX],[DX+1]语法错误,
MOV CL,BL ;需采用BX,
MOV CH,00H ;因此显得有点繁杂。
MOV SI,DX ;利用SI来代替DX,保护DX
ADD SI,2 ;SI指向第一个输入的字符内存单元
LOOP1: MOV BL,[SI] ;将SI指向的字符的16位ACSII码
CMP BL,5AH ;和5AH('Z')比较
JGE NEXT1 ;大于5AH(即为小写字母时)则跳到NEXT1
INC SI ;SI指向下一个字符的内存单元
LOOP LOOP1 ;循环LOOP1
NEXT1: MOV AL,20H ;将小写字母的16位ACSII码
SUB AL,[SI] ;减去20H(小写字母比大写字母的ACSII码大20H)
MOV [SI],AL ;转换后的大写字母覆盖回对应内存单元
LOOP LOOP1 ;循环LOOP1
MOV BL,24H ;将‘$’(9号调用需要字符串以此字符结尾)
MOV [SI+1],BL ;存进输入字符串紧接的内存单元
ADD DX,2
MOV AX,9 ;9号
INT 21H ;调用
MOV AH,4CH ;返回
INT 21H ;DOS
CODE ENDS
END START