You need to enable JavaScript to run this app. 如何使用Emu8086程序检测指定长度字节数组的重复元素
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Emu8086程序检测指定长度字节数组的重复元素

Emu8086字节数组重复值检测程序实现

实现思路

用经典双重对比遍历逻辑,无需额外存储空间,适合8086汇编的小规模数组场景:

  • 外层循环:依次取出数组第i个元素(i从0到数组长度-2)
  • 内层循环:从第i+1个元素开始,逐个和第i个元素做等值比较
  • 只要匹配到相等值,立即终止循环标记存在重复;全量遍历完成无匹配则标记无重复

完整可运行代码

org 100h ; 适配emu8086的COM文件运行要求

; 题目给定的数据定义
ARRAY db 23, 9, 12, 7, 11, 3
DIM db 6

; 结果存储约定:DL = 0 无重复,DL = 1 存在重复
start:
    xor cx, cx
    mov cl, [DIM] ; 加载数组长度到CX寄存器
    dec cx ; 外层循环仅需运行 长度-1 次,最后一个元素无需参与对比
    xor si, si ; SI作为外层数组索引,初始为0

outer_loop:
    mov al, [ARRAY + si] ; 取出当前外层遍历的元素到AL
    mov di, si ; DI作为内层索引,从当前元素的下一位开始
    inc di
    push cx ; 暂存外层循环计数,避免内层循环覆盖

inner_loop:
    cmp al, [ARRAY + di] ; 对比当前外层元素和内层遍历元素
    je found_duplicate ; 数值相等则直接跳转到重复处理分支
    inc di
    loop inner_loop

    pop cx ; 恢复外层循环计数
    inc si ; 外层索引+1
    loop outer_loop

; 全量遍历完成未找到重复值
no_duplicate:
    mov dl, 0
    jmp exit_program

; 匹配到重复值
found_duplicate:
    pop cx ; 弹出之前暂存的CX值,避免栈不平衡
    mov dl, 1

exit_program:
    int 20h ; 程序退出,运行结束后可直接查看DL寄存器的值获取结果

测试说明

  • 针对题目给出的无重复示例数组,程序运行后DL寄存器值为0
  • 若修改数组为存在重复的场景(比如把最后一位3改为9),程序运行后DL寄存器值为1
  • 数组长度可任意修改DIM的赋值,程序逻辑无需调整即可适配

内容的提问来源于stack exchange,提问作者Alisher Holmirzayev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 03:06:00