8086系列(6):寻找数组A和B中相同的元素

题目

已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一程序,把既在A中又在B中出现的整数存放于数组C中。

思路

取出数组A中的元素放入AX,用串查找指令查找AX是否出现在数组B中,如果出现则放入数组C。在查找过程中涉及到二重循环,一是取出数组A中的元素,二是scasw在B查找,我都使用了cx计数器,做法是在scasw查找B之前先把cx push到堆栈里,之后再弹出。

代码

datasg segment
    array_A dw 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14  ;15个数
    array_C dw 15 dup(?)
datasg ends
extendsg segment
    array_B dw 1,14,1,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0  ;20个数
extendsg ends
;-------------
codesg segment
    assume ds:datasg,cs:codesg,es:extendsg
main proc far
start:
    push ds
    sub ax,ax
    push ax
    mov ax,datasg
    mov ds,ax
    mov ax,extendsg
    mov es,ax
;--------------------
xor si,si
xor di,di
mov cx,15
search_A:
    push cx              ;两重循环都用cx
    mov ax,array_A[si]
    mov cx,20
    cld
    lea di,array_B
    repne scasw      ;字查找
    je insert        ;相等
    jmp next
insert:
    mov array_C[di],ax
    add di,2
next:
    add si,2
    pop cx
    loop search_A
;--------------------
exit:
    ret
main endp
codesg ends
end start

调试

同样还是反汇编

在这里插入图片描述

go到0015吧,然后查看数据段和附加段的分布情况,发现是我们想要的数据。

在这里插入图片描述
一路t下去,发现第一个数0可以找到

在这里插入图片描述
第二个数1也能找到

在这里插入图片描述
发现该数已经写入数组C

在这里插入图片描述
跳过每个循环,直到最后一个

在这里插入图片描述
发现已经写入数组C

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值