1.把自己的学号和姓名按照e**************的格式,通过10号dos功能调用输入到缓冲区buffer中,例如e00000001zhang xiao xiao,并利用9号功能调用输出学号和姓名; 。2.把buffer中的所有小写字母转换成大写字母,并利用9号功能调用输出转换后的学号和姓名,例如输出为E00000001 ZHANG XIAO XIAO; 3.编写程序,实现对缓冲区buffer中的元素从小到大排序,并输出。
时间: 2023-07-23 10:33:55 浏览: 86
用文件存储10个学生的姓名、学号、手机号、地址,可通过姓名或者学号查找
5星 · 资源好评率100%
下面是实现上述功能的汇编代码:
```
; 学号和姓名按照 e************** 格式输入,存储在 buffer 中
.MODEL SMALL
.STACK 100H
.DATA
buffer DB 30 DUP('$') ; 缓冲区,存储学号和姓名
msg1 DB '请输入学号和姓名,格式为 e**************zhang xiao xiao$'
msg2 DB '输入的学号和姓名为:$'
msg3 DB '转换后的学号和姓名为:$'
msg4 DB '排序后的学号和姓名为:$'
nl DB 0DH, 0AH, '$' ; 换行符
.CODE
MAIN PROC
MOV AX, @DATA ; 初始化数据段寄存器
MOV DS, AX
; 调用10号功能,将学号和姓名输入到缓冲区
MOV AH, 10H
MOV DX, OFFSET buffer
MOV CX, 30 ; 缓冲区大小为 30
INT 21H
; 调用9号功能,输出输入的学号和姓名
MOV AH, 9H
LEA DX, msg2
INT 21H
LEA DX, buffer
INT 21H
INT 21H ; 输出换行符
; 将缓冲区中的小写字母转换成大写字母
MOV SI, OFFSET buffer
MOV CX, 30
CONVERT_LOOP:
MOV AL, [SI]
CMP AL, 'a'
JB SKIP_CONVERT
CMP AL, 'z'
JA SKIP_CONVERT
SUB AL, 20H ; 转换成大写字母
MOV [SI], AL
SKIP_CONVERT:
INC SI
LOOP CONVERT_LOOP
; 调用9号功能,输出转换后的学号和姓名
MOV AH, 9H
LEA DX, msg3
INT 21H
LEA DX, buffer
INT 21H
INT 21H ; 输出换行符
; 对缓冲区中的元素从小到大排序
MOV BX, OFFSET buffer
MOV CX, 30
SORT_LOOP:
MOV SI, BX
MOV DI, BX
INC DI
CMP BYTE PTR [SI], BYTE PTR [DI]
JLE SKIP_SWAP
MOV AL, BYTE PTR [SI]
MOV BYTE PTR [SI], BYTE PTR [DI]
MOV BYTE PTR [DI], AL
SKIP_SWAP:
INC BX
LOOP SORT_LOOP
; 调用9号功能,输出排序后的学号和姓名
MOV AH, 9H
LEA DX, msg4
INT 21H
LEA DX, buffer
INT 21H
INT 21H ; 输出换行符
MOV AH, 4CH ; 退出程序
INT 21H
MAIN ENDP
END MAIN
```
这段代码实现了将学号和姓名以指定格式输入到缓冲区中,将缓冲区中的小写字母转换成大写字母,并对缓冲区中的元素进行从小到大排序,最后输出排序后的学号和姓名。
阅读全文