如何使用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
相关产品推荐
相关产品推荐

