所以,我有以下数组(字节)。
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)