使用emu8086 从键盘输入一个字符串(包含数字和字母),找出其中的数字字符将其排序后输出到屏幕上。
时间: 2024-03-20 17:40:30 浏览: 34
以下是使用EMU8086汇编语言实现的代码:
```
assume cs:code, ds:data
data segment
input db 20 ; 用于存放输入的字符串
output db 20 ; 用于存放输出的字符串
nums db 20 dup(?) ; 用于存放数字字符
data ends
code segment
start:
mov ax, data
mov ds, ax
; 从键盘输入一个字符串
mov ah, 0ah
mov dx, offset input
int 21h
; 将输入的字符串中的数字字符保存到nums数组中
mov si, offset input + 2 ; 跳过输入缓冲区前两个字节
mov di, offset nums
scan:
mov al, [si]
cmp al, '0'
jl next
cmp al, '9'
jg next
mov [di], al
inc di
next:
inc si
cmp byte ptr [si], 0dh ; 判断是否到达字符串结尾
jnz scan
; 对nums数组中的数字字符进行排序
mov cx, di
dec cx ; cx = 数字字符的个数
mov si, offset nums
sort:
xor bx, bx
inner:
mov al, [si]
cmp al, [si+1]
jbe skip
xchg al, [si+1]
mov [si], al
inc bx
skip:
inc si
cmp bx, cx
jb inner
dec cx
cmp cx, 0
jnz sort
; 将排序后的数字字符复制到output数组中
mov si, offset nums
mov di, offset output
mov cx, di
add cx, 2 ; 跳过输出缓冲区前两个字节
copy:
mov al, [si]
mov [di], al
inc si
inc di
loop copy
; 在输出缓冲区末尾添加换行符和字符串结尾符
mov byte ptr [di], 0ah
inc di
mov byte ptr [di], 0
; 将输出的字符串显示在屏幕上
mov ah, 09h
mov dx, offset output
int 21h
; 程序结束,返回DOS
mov ah, 4ch
int 21h
code ends
end start
```
其中,使用int 21h, ah=0ah指令从键盘获取一个字符串,使用cmp指令比较字符是否为数字字符,使用xchg指令交换两个数的值,使用loop指令重复执行指定次数的循环。