汇编编写完整上机程序,实现如下功能: (1)段内子程序:实现从键盘输入10个字母并将其ASCII码存入到字节数组STRING中。(7分) (2)段间子程序:将STRING中的小写字母都转化成大写字母,并将STRING内容显示输出。(8分)
时间: 2024-01-16 18:05:30 浏览: 68
下面是一个实现题目要求的完整上机程序:
```
TITLE Convert String to Upper Case
.MODEL SMALL
.STACK 100H
.DATA
STRING DB 10 DUP (?) ; 存放输入的字符 ASCII 码
MSG1 DB 'Please enter 10 letters:', 0DH, 0AH, '$'
MSG2 DB 'The converted string is:', 0DH, 0AH, '$'
.CODE
MAIN PROC
MOV AX, @DATA ; 初始化数据段寄存器
MOV DS, AX
MOV AH, 09H ; 显示提示信息
LEA DX, MSG1
INT 21H
CALL READ_STRING ; 调用输入字符串的子程序
CALL CONVERT_STRING ; 调用转换字符串的子程序
MOV AH, 09H ; 显示转换后的字符串
LEA DX, MSG2
INT 21H
MOV AH, 09H
LEA DX, STRING
INT 21H
MOV AH, 4CH ; 退出程序
INT 21H
MAIN ENDP
READ_STRING PROC
MOV CX, 10 ; 循环读取10个字符
LEA SI, STRING ; 将 STRING 的偏移地址存放到 SI 寄存器中
READ_LOOP:
MOV AH, 01H ; 从键盘读取一个字符
INT 21H
MOV [SI], AL ; 将读取的字符存放到字符串中
INC SI ; 将指针指向下一个位置
LOOP READ_LOOP ; 继续读取下一个字符
RET
READ_STRING ENDP
CONVERT_STRING PROC
LEA SI, STRING ; 将 STRING 的偏移地址存放到 SI 寄存器中
MOV CX, 10 ; 循环处理10个字符
CONVERT_LOOP:
MOV AL, [SI] ; 将当前字符的 ASCII 码移动到 AL 寄存器中
CMP AL, 61H ; 判断是否为小写字母
JB SKIP ; 如果不是小写字母,则跳过
CMP AL, 7AH ; 判断是否为小写字母
JA SKIP ; 如果不是小写字母,则跳过
SUB AL, 20H ; 将小写字母转换为大写字母
MOV [SI], AL ; 将转换后的字符存放回字符串中
SKIP:
INC SI ; 将指针指向下一个字符
LOOP CONVERT_LOOP ; 继续处理下一个字符
RET
CONVERT_STRING ENDP
END MAIN
```
上面的程序实现了从键盘输入10个字符,并将其 ASCII 码存放到 STRING 数组中的 READ_STRING 子程序,以及将字符串中的小写字母转换为大写字母,并将转换后的字符串显示输出的 CONVERT_STRING 子程序。在主程序中,先调用 READ_STRING 子程序获取用户输入的字符串,然后调用 CONVERT_STRING 子程序将小写字母转换为大写字母,并将转换后的字符串输出。
阅读全文