33,319
社区成员
发帖
与我相关
我的任务
分享用汇编语言怎么写这个代码:数据段4行*8列的字数组,求所有元素的最小值和最大
值。最大值存在数据段的最末尾(无须屏幕输出),最小值存在
代码段的最前面(无须屏幕输出)。
; ========================
; 数组最大最小值查找程序
; ========================
DATA SEGMENT
; 定义4行8列的字数组(4*8=32个字,每个字=2字节)
; 使用DW(Define Word)定义,范围-32768~32767
ARRAY DW 100, 45, -200, 300, 50, -99, 78, 12 ; 第1行
DW -150, 80, 999, -450, 33, 67, -88, 123 ; 第2行
DW 25, -75, 400, -300, 90, -25, 150, 88 ; 第3行
DW 600, -50, 222, -111, 44, 33, 66, 77 ; 第4行
; 数据段末尾用于存放最大值
; 预留一个字的空间
MAX_VALUE DW ?
DATA ENDS
; 代码段:最小值将存放在这里的开始位置
CODE SEGMENT
; 在代码段最前面为最小值预留空间
MIN_VALUE DW ?
; 假设程序从这里开始执行
ASSUME CS:CODE, DS:DATA
START:
; 初始化数据段
MOV AX, DATA
MOV DS, AX
; ========================
; 初始化最大值和最小值
; ========================
; 将数组第一个元素同时作为初始最大值和最小值
MOV AX, ARRAY[0] ; 获取第一个元素
MOV MIN_VALUE, AX ; 存为初始最小值
MOV MAX_VALUE, AX ; 存为初始最大值
; ========================
; 设置循环参数
; ========================
MOV CX, 32 ; 总元素个数 = 4行×8列 = 32
MOV SI, 0 ; 数组索引(每个元素2字节,所以是0,2,4,...)
FIND_LOOP:
; 获取当前数组元素
MOV AX, ARRAY[SI]
; ========================
; 比较并更新最小值
; ========================
CMP AX, MIN_VALUE ; 比较当前元素和最小值
JGE NOT_MIN ; 如果当前元素≥最小值,跳过
MOV MIN_VALUE, AX ; 否则更新最小值
NOT_MIN:
; ========================
; 比较并更新最大值
; ========================
CMP AX, MAX_VALUE ; 比较当前元素和最大值
JLE NOT_MAX ; 如果当前元素≤最大值,跳过
MOV MAX_VALUE, AX ; 否则更新最大值
NOT_MAX:
; ========================
; 更新循环变量
; ========================
ADD SI, 2 ; 移动到下一个字(2字节)
LOOP FIND_LOOP ; CX减1,如果CX≠0则继续循环
; ========================
; 程序结束
; ========================
; 将最大值存入数据段末尾(已经自动在循环中更新)
; 最小值已经在代码段最前面的MIN_VALUE中
; 程序终止(DOS环境)
MOV AH, 4CH
INT 21H
CODE ENDS
END START