SI To DI ошибка копирования для реверса - PullRequest
0 голосов
/ 19 января 2011

Предположим, у нас есть число 321, которое si указывает на смещение 1 и временное смещение в ди .

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.

Ответы [ 2 ]

2 голосов
/ 19 января 2011

Выглядит хорошо для меня - пошагово пройдитесь по нему в отладчике, чтобы увидеть, куда он идет не так.

1 голос
/ 19 января 2011

Если начальные условия действительно такие, как вы описали, я думаю, что ваша область хранения temp должна перекрываться с исходным вводом: я не вижу, как ваш цикл мог бы привести к дублированию "1" в противном случае.

В частности, я бы предположил, что temp указывает на байт сразу после начала исходного ввода (как очень дикое предположение: возможно, буфер, где «321» зарезервирован в разделе данных и был случайно объявлен кактолько один байт, и temp объявляется сразу после этого).

т.е. изначально:

   buffer for original number
     |
     |  temp (== di) actually points here
     |   |
     v   v
---+---+---+---+---+---
   | 3 | 2 | 1 |   |   
---+---+---+---+---+---
             ^
             |
        initial si

После первой итерации «1» перезаписывает «2»:

        temp
         |
         v  di
---+---+---+---+---+---
   | 3 | 1 | 1 |   |   
---+---+---+---+---+---
        si

После второй итерации «1» (которая изначально была «2») копируется поверх оригинальной «1»:

        temp
         |
         v      di
---+---+---+---+---+---
   | 3 | 1 | 1 |   |   
---+---+---+---+---+---
    si

После третьей итерации"3" копируется:

        temp
         |
         v          di
---+---+---+---+---+---
   | 3 | 1 | 1 | 3 |   
---+---+---+---+---+---
si

... и, наконец, с $ в конце:

        temp
         |
         v          di
---+---+---+---+---+---
   | 3 | 1 | 1 | 3 | $ 
---+---+---+---+---+---
si

... так что temp теперь указывает на "113».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...