使用em8086使用完整的代码完成以下要求:从键盘输入一个字符串(包含数字和字母),找出其中的数字字符将其排序后输出到屏幕上。
时间: 2024-03-20 09:41:17 浏览: 63
从键盘上输入一串英文字符(不含空格与其他字符),统计每个字符的数目,并输出字母及相应的数目。
以下是使用em8086汇编语言完成此任务的完整代码:
```
DATA SEGMENT
INPUT_BUFFER DB 100 DUP ('$')
OUTPUT_BUFFER DB 100 DUP ('$')
DIGITS DB 10 DUP ('$')
NEW_LINE DB 0DH, 0AH, '$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; 从键盘输入一个字符串
MOV AH, 0Ah
LEA DX, INPUT_BUFFER
INT 21h
; 查找并存储数字字符
MOV SI, OFFSET INPUT_BUFFER
MOV CX, 0
FIND_DIGITS:
MOV AL, [SI]
CMP AL, 0
JE SORT_DIGITS
CMP AL, '0'
JL NEXT_CHAR
CMP AL, '9'
JG NEXT_CHAR
MOV [DIGITS+CX], AL
INC CX
CMP CX, 10
JE SORT_DIGITS
NEXT_CHAR:
INC SI
JMP FIND_DIGITS
; 冒泡排序数字字符
SORT_DIGITS:
MOV SI, OFFSET DIGITS
MOV CX, 10
SORT_LOOP:
MOV DI, SI
MOV AL, [SI]
INNER_LOOP:
CMP AL, [SI+1]
JLE SKIP_SWAP
XCHG AL, [SI+1]
MOV [SI], AL
SKIP_SWAP:
INC SI
LOOP INNER_LOOP
MOV [DI], AL
DEC CX
JNZ SORT_LOOP
; 输出排序后的数字字符到屏幕
MOV SI, OFFSET DIGITS
MOV CX, 10
MOV DI, OFFSET OUTPUT_BUFFER
OUTPUT_LOOP:
MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
LOOP OUTPUT_LOOP
MOV BYTE PTR [DI], '$'
MOV AH, 09h
MOV DX, OFFSET OUTPUT_BUFFER
INT 21h
; 退出程序
MOV AH, 4Ch
INT 21h
CODE ENDS
END START
```
以上代码实现了从键盘输入一个字符串,找出其中的数字字符将其排序后输出到屏幕上的功能。在代码中使用了INT 21h中断来进行键盘输入和屏幕输出操作,使用了MOV、CMP、JMP等指令来进行数据传输和条件跳转操作,使用了冒泡排序算法来进行数字字符的排序操作。
阅读全文