汇编语言数组元素最大值求解

攸149 2023-10-15 18:22:20

用汇编语言怎么写这个代码:数据段4行*8列的字数组,求所有元素的最小值和最大
值。最大值存在数据段的最末尾(无须屏幕输出),最小值存在
代码段的最前面(无须屏幕输出)。

...全文
1300 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
cf_nxcxy 15小时前
  • 打赏
  • 举报
回复

; ========================
; 数组最大最小值查找程序
; ========================

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

33,319

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧