在8086masm环境下,写一个汇编程序,要求以下两个功能分别使用两个子程序实现。 1 检测并清除数字字符; 2 字符串中小写字母改为大写字母。具体要求:“从键盘输入(带回显)一个长度在10字符以内的字符串,并保存在缓冲区; 检测并删除字符串中的数字字符,将字符串中所有小写字母改为大写字母; 将处理后的字符串在新的一行显示,若字符串为空串则显示 ‘?’。”
时间: 2024-03-10 10:45:57 浏览: 69
汇编语言之 两个多位十进制数相加
以下是实现以上要求的汇编程序,其中使用了两个子程序分别实现两个功能:
```assembly
.model small
.stack 100h
.data
input_msg db "Please input a string (max length 10): $"
output_msg db 0ah, "Processed string: ", 13, 10, "$"
empty_msg db 0ah, "?", 13, 10, "$"
buffer db 11, ?, 10 dup ('$')
.code
main proc
mov ax, @data
mov ds, ax
; 从键盘输入字符串
lea dx, input_msg
mov ah, 09h
int 21h
lea si, buffer+2 ; 缓冲区起始位置
mov cx, 10 ; 最大长度为10
mov ah, 01h ; 逐个读入字符
read_loop:
int 21h
cmp al, 0dh ; 回车键结束输入
je end_read
mov [si], al ; 存储字符到缓冲区
inc si
loop read_loop
end_read:
mov byte ptr [si], 0 ; 字符串结束符
; 检测并清除数字字符
call remove_digits
; 字符串中小写字母改为大写字母
call to_uppercase
; 显示处理后的字符串
lea dx, output_msg
mov ah, 09h
int 21h
lea dx, buffer+2
cmp byte ptr [dx], 0 ; 判断字符串是否为空串
je empty_string
mov ah, 09h
print_loop:
mov dl, [dx]
int 21h
inc dx
cmp byte ptr [dx], 0
jne print_loop
jmp end_program
empty_string:
lea dx, empty_msg
mov ah, 09h
int 21h
end_program:
mov ah, 4ch
int 21h
main endp
; 子程序1:检测并清除数字字符
remove_digits proc
lea si, buffer+2 ; 缓冲区起始位置
mov cl, byte ptr [si-1] ; 字符串长度
mov ch, 0 ; 计数器清零
remove_loop:
mov al, [si]
cmp al, '0'
jb skip_remove
cmp al, '9'
ja skip_remove
mov di, si
mov cx, cl
rep movsb ; 删除数字字符
dec byte ptr [si-1] ; 字符串长度减1
dec cl ; 计数器加1
skip_remove:
inc si
cmp cl, 0
jne remove_loop
ret
remove_digits endp
; 子程序2:字符串中小写字母改为大写字母
to_uppercase proc
lea si, buffer+2 ; 缓冲区起始位置
mov cl, byte ptr [si-1] ; 字符串长度
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
dec cl
jnz convert_loop
ret
to_uppercase endp
end main
```
程序流程如下:
1. 从键盘输入一个长度在10字符以内的字符串,并保存在缓冲区。
2. 调用子程序1 `remove_digits`,检测并清除字符串中的数字字符。
3. 调用子程序2 `to_uppercase`,将字符串中所有小写字母改为大写字母。
4. 判断处理后的字符串是否为空串,若为空串则显示“?”;否则在新的一行显示处理后的字符串。
5. 程序结束。
上述程序使用了中断21h的输入输出功能来实现从键盘输入字符串和显示处理后的字符串。其中,输出字符串时使用了循环来逐个输出字符串中的字符,直到遇到字符串结束符为止。
阅读全文