3、从键盘输入一个字符串(包含数字和字母),找出其中的数字字符将其排序后输出到屏幕上。用汇编写
时间: 2024-03-20 10:40:09 浏览: 253
以下是汇编代码,使用的是 x86 架构的汇编语言,可以在 DOSBox 环境下运行:
```
.model small
.stack 100h
.data
message db "Please enter a string: $"
input_buffer db 20
output_buffer db 10 dup('$')
newline db 0ah, 0dh, '$'
length dw ?
digits db 10 dup(0)
.code
main proc
mov ax, @data
mov ds, ax
; 输出提示信息
lea dx, message
mov ah, 09h
int 21h
; 读取用户输入的字符串
lea dx, input_buffer
mov ah, 0ah
int 21h
; 扫描字符串,找出其中的数字并存储到 digits 数组中
mov si, offset input_buffer + 2 ; 跳过输入缓冲区前两个字节,第一个字节为输入的字符串长度,第二个字节为输入结束符
mov cx, [input_buffer + 1] ; 读入的字符串长度
xor bx, bx ; digits 数组的下标
scan_loop:
mov al, [si] ; 读取当前字符
cmp al, '0'
jl next_char ; 如果当前字符不是数字,跳过
cmp al, '9'
jg next_char ; 如果当前字符不是数字,跳过
sub al, '0' ; 将字符转换为数字
mov [digits+bx], al ; 存储到 digits 数组中
inc bx ; digits 数组的下标加一
next_char:
inc si ; 输入字符串的指针加一
loop scan_loop
; 对 digits 数组进行排序(使用简单的冒泡排序)
mov cx, 10 ; digits 数组的长度
sort_loop:
xor bx, bx ; digits 数组的下标
inner_loop:
mov al, [digits+bx]
mov dl, [digits+bx+1]
cmp al, dl
jle skip_swap
mov [digits+bx+1], al
mov [digits+bx], dl
skip_swap:
inc bx
loop inner_loop
loop sort_loop
; 将排序后的数字字符存储到 output_buffer 数组中
mov cx, 10 ; digits 数组的长度
mov si, offset output_buffer
xor bx, bx ; digits 数组的下标
output_loop:
mov al, [digits+bx]
add al, '0' ; 将数字转换为字符
mov [si], al
inc si ; output_buffer 数组的下标加一
inc bx ; digits 数组的下标加一
loop output_loop
; 输出排序后的数字字符
lea dx, output_buffer
mov ah, 09h
int 21h
; 输出换行符
lea dx, newline
mov ah, 09h
int 21h
mov ah, 4ch
int 21h
main endp
end main
```
阅读全文