我的第一个汇编程序问题,帮忙解决
编译没问题,但是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