Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 反转的SI到DI复制错误_Assembly - Fatal编程技术网

Assembly 反转的SI到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将被删除。在我看来没问题-在调试器中逐步检查它以查看其出错的地方。在我看来没问题-在调试

假设我们有编号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将被删除。

在我看来没问题-在调试器中逐步检查它以查看其出错的地方。

在我看来没问题-在调试器中逐步检查它以查看其出错的地方。

如果初始条件确实如您所述,我认为您的
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:)是的,你是对的。我已经改变了温度在数据段中的偏移量,每件事情都在最佳状态。是的,你说得对。我已经改变了温度在数据段中的偏移量,每件事情都在最佳状态。