; 实验七-4: 字符串转换程序 - 小写转大写 ; 功能: 将字符串中的小写字母转换为大写字母 DATAS SEGMENT INPUT_STRING DB 'hello, assembly!', 0 ; 输入字符串(小写) OUTPUT_STRING DB 20 DUP(?) ; 输出字符串缓冲区 DASH_LINE DB 0DH, 0AH, '-', 0DH, 0AH, '$' DATAS ENDS STACKS SEGMENT DB 64 DUP(?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES, DS:DATAS, SS:STACKS START: MOV AX, DATAS MOV DS, AX LEA SI, INPUT_STRING ; SI指向输入字符串 LEA DI, OUTPUT_STRING ; DI指向输出字符串 ; 复制并转换每个字符 COPY_LOOP: MOV AL, [SI] ; 读取字符 CMP AL, 0 ; 检查是否结束 JE COPY_DONE ; 检查是否为小写字母 'a'-'z' CMP AL, 'a' JB NOT_LOWER ; AL < 'a',不是小写 CMP AL, 'z' JA NOT_LOWER ; AL > 'z',不是小写 ; 转换为大写:ASCII码减去32 SUB AL, 20H JMP STORE_CHAR NOT_LOWER: ; 非小写字母保持不变 ; 空 格、标点等保持不变 STORE_CHAR: MOV [DI], AL ; 存储转换后的字符 INC SI INC DI JMP COPY_LOOP COPY_DONE: MOV BYTE PTR [DI], 0 ; 添加字符串结束符 ; 显示原始字符串 LEA DX, INPUT_STRING MOV AH, 09H INT 21H ; 显示分隔符 LEA DX, DASH_LINE INT 21H ; 显示转换后的字符串 LEA DX, OUTPUT_STRING INT 21H ; 程序结束 MOV AH, 4CH INT 21H CODES ENDS END START