汇编8086 输入五个两位十进制数,以空格分开,从小到大排序,计算sum/(i+7),保留一位小数(四舍五入),输出排序后数字,
时间: 2024-03-21 16:38:42 浏览: 31
以下是汇编8086程序,实现输入五个两位十进制数,以空格分开,从小到大排序,计算sum/(i+7),保留一位小数(四舍五入),输出排序后数字:
```
DATA SEGMENT
INPUT_MSG DB '请输入五个两位十进制数,以空格分开:$'
OUTPUT_MSG DB '排序后的数字为:%d %d %d %d %d,平均值为:%.1f$'
INPUT_BUF DB 10 DUP ('$')
NUM_BUF DW 5 DUP (0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; 显示输入提示信息
MOV AH, 09H
LEA DX, INPUT_MSG
INT 21H
; 读取输入的字符串
MOV AH, 0AH
LEA DX, INPUT_BUF
INT 21H
; 解析输入的数字
LEA SI, INPUT_BUF+2
MOV CX, 5
MOV DI, 0
PARSE_LOOP:
; 解析一个数字
CALL PARSE_DECIMAL
MOV [NUM_BUF+DI], AX
ADD DI, 2
; 跳过空格
INC SI
CMP BYTE PTR [SI], ' '
JZ SKIP_SPACE
JMP PARSE_LOOP
SKIP_SPACE:
INC SI
LOOP PARSE_LOOP
; 排序数字
MOV CX, 4
OUTER_LOOP:
MOV DI, CX
INNER_LOOP:
MOV AX, [NUM_BUF+DI-2]
CMP AX, [NUM_BUF+DI]
JLE SKIP_SWAP
XCHG AX, [NUM_BUF+DI]
MOV [NUM_BUF+DI-2], AX
CMP DI, 1
JZ END_SORT
DEC DI
JMP INNER_LOOP
SKIP_SWAP:
DEC DI
CMP DI, CX-1
JZ END_SORT
JMP OUTER_LOOP
END_SORT:
; 计算平均值
MOV AX, [NUM_BUF]
ADD AX, [NUM_BUF+2]
ADD AX, [NUM_BUF+4]
ADD AX, [NUM_BUF+6]
MOV BX, 5
ADD BX, 7
MOV DX, 0
DIV BX
MOV BX, AX
MOV AX, DX
ADD BX, 5
ADC AX, 0
MOV DX, 0
DIV BX
ADD AX, 30H
MOV [NUM_BUF+10], AX
; 显示输出提示信息和排序后的数字
MOV AH, 09H
LEA DX, OUTPUT_MSG
PUSH CX
PUSH BX
PUSH DX
LEA DX, NUM_BUF
ADD DX, 2
PUSH DX
CALL PRINTF
ADD SP, 8
; 程序结束
MOV AH, 4CH
INT 21H
PARSE_DECIMAL PROC
; 解析一个十进制数
; 参数:SI - 指向输入的字符串的指针
; 返回值:AX - 解析出的十进制数
PUSH AX
PUSH CX
MOV AX, 0
PARSE_LOOP:
MOV CL, [SI]
CMP CL, '$'
JE PARSE_DONE
SUB CL, '0'
CMP CL, 0AH
JAE PARSE_DONE
MOV BX, AX
MOV AX, 10
MUL BX
ADD AX, CX
INC SI
JMP PARSE_LOOP
PARSE_DONE:
POP CX
POP AX
RET
PARSE_DECIMAL ENDP
PRINTF PROC
; 格式化输出
; 参数:DX - 格式化字符串的地址
; ... - 格式化字符串中的占位符对应的参数
; 返回值:无
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX, SP
MOV CX, 0
PRINTF_LOOP:
LODSB
CMP AL, '$'
JE PRINTF_DONE
CMP AL, '%'
JNE PRINTF_CHAR
LODSB
CMP AL, 'd'
JE PRINTF_DECIMAL
CMP AL, 'f'
JE PRINTF_FLOAT
JMP PRINTF_CHAR
PRINTF_CHAR:
MOV AH, 02H
MOV DL, AL
INT 21H
JMP PRINTF_LOOP
PRINTF_DECIMAL:
POP AX
CALL PRINT_DECIMAL
PUSH AX
JMP PRINTF_LOOP
PRINTF_FLOAT:
POP AX
POP CX
CALL PRINT_DECIMAL
MOV DL, '.'
INT 21H
POP AX
MOV CL, [AX+2]
MOV CH, 0
ADD AX, CX
MOV CX, 1
JMP PRINTF_DECIMAL_LOOP
PRINTF_DECIMAL_LOOP:
MOV BX, 10
DIV BX
ADD AH, 30H
PUSH AX
INC CX
CMP AX, 0
JNZ PRINTF_DECIMAL_LOOP
PRINTF_DECIMAL_LOOP2:
POP AX
MOV DL, AH
INT 21H
DEC CX
JNZ PRINTF_DECIMAL_LOOP2
PUSH AX
JMP PRINTF_LOOP
PRINTF_DONE:
ADD SP, 4
POP DX
POP CX
POP BX
POP AX
RET
PRINTF ENDP
PRINT_DECIMAL PROC
; 打印一个十进制数
; 参数:AX - 要打印的十进制数
; 返回值:无
PUSH AX
MOV CX, 0
MOV BX, 10
CMP AX, 0
JNZ PRINT_DECIMAL_LOOP
MOV DL, '0'
MOV AH, 02H
INT 21H
JMP PRINT_DECIMAL_DONE
PRINT_DECIMAL_LOOP:
XOR DX, DX
DIV BX
PUSH DX
INC CX
CMP AX, 0
JNZ PRINT_DECIMAL_LOOP
PRINT_DECIMAL_LOOP2:
POP DX
ADD DL, 30H
MOV AH, 02H
MOV DL, DL
INT 21H
DEC CX
JNZ PRINT_DECIMAL_LOOP2
PRINT_DECIMAL_DONE:
POP AX
RET
PRINT_DECIMAL ENDP
CODE ENDS
END START
```
程序中使用了INT 21H中断来实现输入和输出操作,使用了PARSE_DECIMAL过程来解析输入的十进制数,使用了PRINTF过程来格式化输出。程序执行时,会先提示用户输入五个两位十进制数,然后读取用户输入的字符串,并解析出数字。接着,程序会对数字进行排序,然后计算平均值,并使用PRINTF过程来输出排序后的数字和平均值。最后,程序结束。
相关推荐
![ASM](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)