D数组应该包含放在S中偶数位置的元素,然后是放在奇数位置的元素。最后D数组应该看起来像1,3,5,2,4,但下面的代码只使它成为1,3,5,0,0。我验证了,指令mov si, 1
执行一次,然后程序退出。
assume ds:data,cs:code
data segment
S db 1,2,3,4,5
len equ $-S
D db len dup(0)
data ends
code segment
start:
mov ax, data
mov ds, ax
mov si, 0
mov di, 0
mov cx, len
repeat:
mov al, S[si]
mov D[di], al
inc di
add si, 2
cmp si, len
JGE instruction
dec cx
CMP cx, 0
JNE repeat
JE sf
instruction:
mov si, 1
sf:
mov ax, 4C00h
int 21h
code ends
end start
字符串
1条答案
按热度按时间rhfm7lfc1#
我再次查看了代码,注意到有些部分可以更改或删除。
1.循环计数器在
cx
中。我不知道这是否是好的做法,但我只对repeat1
和conditional jumps
使用了si
。所以我删除了所有连接到cx
的代码。1.我将指令
JE sf
移到cmp si, len
之后,因为在奇数的情况下,si (index of S)
总是偶数。程序将1
,3
和5
复制到array D
,并且对于索引si = 0, 2 and 4
,此条件跳转不为真。1.在第三次迭代中,
array D
看起来像这样D = 1 3 5
,di = 3
和si = 6
。代码通过条件跳转到instruction
标签。您的代码更改了si
,si = 1
,所以您想做正确的事情,更改index of S array
并复制其余的数字。我添加了jmp repeat1
,si
和di
是正确的,所以程序复制数组S的其余部分。1.迭代4:
D[3] = S[1] = 2
di = 4
si = 3
迭代5:
D[4] = S[3] = 4
di = 5
si = 5
这里是
si = 5
,所以程序复制了所有的值并跳转到退出标签sf
。字符串