Assembly 汇编8086中的序列构造

Assembly 汇编8086中的序列构造,assembly,x86-16,Assembly,X86 16,我想做的是,从两个字节序列(我们称之为s1和s2)开始,我想得到序列d,表示每个位置的最大值 我已经尝试将序列s1移动到目的地,以便之后可以将序列s2与新的目的地序列进行比较,并在需要时替换元素 所以。。“运动”完成了,只是它没有完成它的工作——它没有取代任何东西 欢迎任何建议D ;S1: 1, 3, 6, 2, 3, 7 ;S2: 6, 3, 8, 1, 2, 5 ;D: 6, 3, 8, 2, 3, 7 ASSUME cs:text_,ds:data_ data_ SEGMENT s1

我想做的是,从两个字节序列(我们称之为s1和s2)开始,我想得到序列d,表示每个位置的最大值

我已经尝试将序列s1移动到目的地,以便之后可以将序列s2与新的目的地序列进行比较,并在需要时替换元素

所以。。“运动”完成了,只是它没有完成它的工作——它没有取代任何东西

欢迎任何建议D

;S1: 1, 3, 6, 2, 3, 7
;S2: 6, 3, 8, 1, 2, 5
;D: 6, 3, 8, 2, 3, 7

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
mov di, offset d
mov cx, l
cld
rep movsb
push si 
mov si, offset s2 
Repeta:
  cld
  lodsb
  repne scasb
  jg Instruct
  Instruct:
    stosb
loop Repeta
mov ax, 4c00h
int 21h
text_ ENDS
end start

使用x86字符串指令并将其视为字符串会让您感到困扰。您试图解决的问题与字符串无关

您正在操作的字节数组是数字的ASCII码这一事实并不相关或有用(除了
'0'
'9'
的ASCII码是连续的且按顺序排列,因此您可以跳过将数字转换为整数的步骤)

您需要解决的问题是一个简单的每元素最大值,如下所示

for (unsigned i=0 ; i<size ; i++)
    d[i] = max(S1[i], S2[i]);

用于(unsigned i=0;我推荐你的代码,特别是如果你想得到别人的帮助。例如,如果你只想比较每个位置,为什么你甚至有一个
scasb
?还有,学会使用调试器。作为一个初学者,我认为这是必要的。这就是为什么我问这个问题,看看我是否误解了。另外,对不起,我不知道r不注释代码,下一次注释代码对你来说更重要!六个月后,当你重新访问项目时,你能回忆起编码的目的吗?使用并添加注释。还可以描述你尝试使用的算法,可能是C或伪代码。使用调试器的建议仍然有效当然可以。注释应该在代码本身中,而不是在分开的注释框中。使用注释来解释行的意图。不要使用注释来解释处理器或汇编程序手册中可以找到的内容,除非它是可能遗漏的相关点。