8086中设计一个程序,在已知的TABLE开始的字单元中存放有10个无符号整数,试编程挑选出其中最大值和最小值并显示
时间: 2024-05-15 18:19:32 浏览: 83
以下是8086汇编代码实现:
```
ORG 100h
; 初始化数据
MOV SI, TABLE ; SI指向数据开始处
MOV AX, [SI] ; AX存储第一个数据,作为最大值和最小值的初始值
MOV BX, AX ; BX存储最大值
MOV CX, AX ; CX存储最小值
INC SI ; SI指向下一个数据
; 循环比较数据
MOV CX, 9 ; 循环10次,比较9个数据
LOOP_START:
MOV DX, [SI] ; DX存储当前数据
CMP DX, BX ; 比较当前数据和最大值
JG UPDATE_MAX ; 如果当前数据比最大值大,更新最大值
CMP DX, CX ; 比较当前数据和最小值
JL UPDATE_MIN ; 如果当前数据比最小值小,更新最小值
INC SI ; SI指向下一个数据
LOOP LOOP_START ; 继续比较下一个数据
; 显示结果
UPDATE_MAX:
MOV BX, DX ; 更新最大值
JMP DISPLAY
UPDATE_MIN:
MOV CX, DX ; 更新最小值
DISPLAY:
MOV AH, 2 ; 显示函数
MOV DL, ' ' ; 每个数字之间用空格隔开
INT 21h
MOV AX, BX ; 显示最大值
CALL DISPLAY_NUM
MOV AH, 2
MOV DL, ' '
INT 21h
MOV AX, CX ; 显示最小值
CALL DISPLAY_NUM
JMP END
; 显示单个数字
DISPLAY_NUM:
PUSH AX ; 保存AX
MOV CX, 0 ; CX存储数字位数
MOV BX, 10 ; 除数
MOV DX, 0 ; DX存储余数
DIV BX ; AX除以10,商存储在AL,余数存储在AH
PUSH DX ; 保存余数
INC CX ; 数字位数加1
CMP AX, 0 ; 如果商为0,表示数字已经处理完毕
JNE DISPLAY_NUM ; 否则继续处理
DISPLAY_NUM_LOOP:
POP DX ; 取出余数
ADD DL, '0' ; 将余数转换为字符
MOV AH, 2 ; 显示函数
INT 21h
DEC CX ; 数字位数减1
JZ DISPLAY_NUM_END ; 如果数字已经全部显示,退出循环
MOV DL, '.' ; 显示小数点
MOV AH, 2
INT 21h
JMP DISPLAY_NUM_LOOP
DISPLAY_NUM_END:
POP AX ; 恢复AX
RET
END:
MOV AH, 4Ch ; 结束函数
INT 21h
; 数据
TABLE:
DW 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
```
该程序首先将第一个数据作为最大值和最小值的初始值,然后循环比较剩余的9个数据,更新最大值和最小值。最后使用显示函数显示最大值和最小值。
阅读全文