Assembly 反转的SI到DI复制错误
假设我们有编号321,其si指向偏移1 温度的偏移量在di中Assembly 反转的SI到DI复制错误,assembly,Assembly,假设我们有编号321,其si指向偏移1 温度的偏移量在di中 mov di,offset temp 现在我们想通过以下命令将si复制到di: mov cx,3 reverse: mov dl,byte ptr [si] mov byte ptr[di],dl inc di dec si loop reverse mov byte ptr[di],'$' 但输出的是113而不是123,这意味着整数2将被删除。在我看来没问题-在调试器中逐步检查它以查看其出错的地方。在我看来没问题-在调试
mov di,offset temp
现在我们想通过以下命令将si复制到di:
mov cx,3
reverse:
mov dl,byte ptr [si]
mov byte ptr[di],dl
inc di
dec si
loop reverse
mov byte ptr[di],'$'
但输出的是113而不是123,这意味着整数2将被删除。在我看来没问题-在调试器中逐步检查它以查看其出错的地方。在我看来没问题-在调试器中逐步检查它以查看其出错的地方。如果初始条件确实如您所述,我认为您的
temp
存储区域必须与原始输入重叠:否则,我看不出您的循环将如何导致重复的“1”
具体地说,我猜temp
指向原始输入开始后的字节(这是一个非常疯狂的猜测:可能是缓冲区,其中“321”保留在数据段中,并且意外地被声明为仅一个字节,temp
随后立即被声明)
i、 e.最初:
buffer for original number
|
| temp (== di) actually points here
| |
v v
---+---+---+---+---+---
| 3 | 2 | 1 | |
---+---+---+---+---+---
^
|
initial si
在第一次迭代之后,“1”覆盖了“2”:
在第二次迭代之后,“1”(原来是“2”)被复制到原来的“1”之上:
第三次迭代后,复制“3”:
temp
|
v di
---+---+---+---+---+---
| 3 | 1 | 1 | 3 |
---+---+---+---+---+---
si
…最后是结尾处的$
:
temp
|
v di
---+---+---+---+---+---
| 3 | 1 | 1 | 3 | $
---+---+---+---+---+---
si
…因此
temp
现在指向“113”。如果初始条件真的如您所述,我认为您的temp
存储区域必须与原始输入重叠:否则,我看不出您的循环将如何导致重复的“1”
具体地说,我猜temp
指向原始输入开始后的字节(这是一个非常疯狂的猜测:可能是缓冲区,其中“321”保留在数据段中,并且意外地被声明为仅一个字节,temp
随后立即被声明)
i、 e.最初:
buffer for original number
|
| temp (== di) actually points here
| |
v v
---+---+---+---+---+---
| 3 | 2 | 1 | |
---+---+---+---+---+---
^
|
initial si
在第一次迭代之后,“1”覆盖了“2”:
在第二次迭代之后,“1”(原来是“2”)被复制到原来的“1”之上:
第三次迭代后,复制“3”:
temp
|
v di
---+---+---+---+---+---
| 3 | 1 | 1 | 3 |
---+---+---+---+---+---
si
…最后是结尾处的$
:
temp
|
v di
---+---+---+---+---+---
| 3 | 1 | 1 | 3 | $
---+---+---+---+---+---
si
…因此
temp
现在指向“113”。另一个答案是更多的填鸭式回答,但是asm程序员应该知道如何使用调试器来发现自己的错误。所以,+1:)另一个答案是更多的填鸭式,但是asm程序员应该知道如何使用调试器来发现自己的错误。所以,+1:)是的,你是对的。我已经改变了温度在数据段中的偏移量,每件事情都在最佳状态。是的,你说得对。我已经改变了温度在数据段中的偏移量,每件事情都在最佳状态。