请用X86汇编呈现给我
时间: 2024-03-20 15:40:53 浏览: 18
好的,以下是用 x86 汇编语言实现从键盘输入一个字符串,找出其中的数字字符将其排序后输出到屏幕上的代码。这里采用的是 DOS 系统的中断调用方式。
```
.MODEL SMALL
.STACK 100h
.DATA
str DB 100h
numbers DB 100h
num_count DB 0
.CODE
MAIN PROC
; 读取用户输入的字符串
MOV SI, OFFSET str
CALL input_string
; 找出字符串中的数字字符并排序
CALL sort_numbers
; 输出排序后的数字字符
CALL output_numbers
; 程序结束
MOV AH, 4Ch
INT 21h
MAIN ENDP
input_string PROC
mov ah, 0 ; 读取键盘输入
int 16h ; 调用 16h 中断
cmp al, 0Dh ; 如果输入回车键,则结束输入
je end_input
mov [si], al ; 将输入的字符存入字符串中
inc si ; 字符串指针加一
jmp input_string
end_input:
mov [si], 0 ; 字符串结束符
ret
input_string ENDP
sort_numbers PROC
mov cx, 0 ; 数字计数器清零
mov di, OFFSET str ; 字符串指针指向开头
loop_start:
mov al, [di] ; 获取当前字符
cmp al, 0 ; 如果到了字符串结尾,则结束循环
je end_loop
cmp al, '0' ; 如果当前字符是数字字符,则将其存入数字数组中
jb continue_loop
cmp al, '9'
ja continue_loop
mov [numbers+cx], al
inc cx
continue_loop:
inc di ; 字符串指针加一
jmp loop_start
end_loop:
mov num_count, cl ; 保存数字数量
; 在这里进行数字排序
ret
sort_numbers ENDP
output_numbers PROC
mov cx, 0 ; 数字计数器清零
mov si, OFFSET numbers ; 数字指针指向开头
output_loop:
cmp cx, num_count ; 如果遍历完所有数字,则结束循环
je end_output
mov al, [si] ; 获取当前数字
mov ah, 02h ; 设置输出字符的功能号
int 21h ; 调用 21h 中断输出字符
inc si ; 数字指针加一
inc cx ; 数字计数器加一
jmp output_loop
end_output:
ret
output_numbers ENDP
END MAIN
```
以上代码可以在 DOS 系统下使用 DEBUG 工具或其他汇编编译器进行编译链接并运行。