从程序集x86中的2个现有数组创建新数组

时间:2017-11-28 11:43:45

标签: arrays string assembly x86-16

所以,我有以下数组(字节)。

s1 db 1362375

s2 db 6381259

从它们开始,我必须创建另一个数组,其中包含每个位置的最大值,导致数组看起来像这样

d db 6382379

我尝试使用字符串上的指令(例如SCASB,MOVSB等)来完成它。

以下代码基于以下思想:将S1的数据移至D,然后将其与S2中的数据进行比较。如果是这种情况,则会进行更改。

ASSUME cs:text_,ds:data_

data_ SEGMENT

s1 db '1362375'
l equ $-s1
s2 db '6381259' 
d db l dup (?)

data_ ENDS

text_ SEGMENT
start:
    mov ax, data_
    mov ds, ax
    mov es, ax
    mov si, offset s1  ;data of s1 is moved to si
    mov di, offset d   ;data of d is moved to di
    mov cx, l          ;length is stored in cx
    cld                ;setting the direction
    rep movsb    
    mov di, 0      ;moving data from si to di (d takes the value of s1)
    mov cx, 2*l
    Repeta:
        lodsb
        cmp al,[di]   
        jng do_not_write 
        mov [di],al     ;if s2 is greater than s1, it goes to the next instruction 
        do_not_write: 
            inc di
        dec cx
    loop Repeta
    mov ax, 4c00h
    int 21h
text_ ENDS
end start   

事情是,它移动了我的第一个阵列,然后就是,它没有做我计划做的事情。由于我几乎都是汇编语言的初学者,所以任何帮助都会受到高度赞赏(是的,我知道它也可能以另一种方式完成,我更喜欢这个选项,因为它似乎更容易)。另外,对不起,如果评论看起来不是解释性的,那么英语不是我的母语,因此我已经尽力用每条指令解释我的所作所为。

稍后编辑:代码现在正常工作,我只需要将结果存储在d中(这似乎不适用于movsb)

0 个答案:

没有答案