2013-11-13 4 views
0

Я изучаю программирование сборки с помощью отладки, в частности, через DOSBox для эмуляции процессоров 8086. Я пытаюсь сделать цикл. Когда я пишу что-то похожее на:Как сделать петлю в сборке

 
looplabel: instruction 
.. 
.. 
loop looplabel 

Как этот скриншот показывает, я получаю сообщение об ошибке:

enter image description here

Можете ли вы помочь мне сделать петлю, используя инструмент отладки (DOSBox) ??

+0

'DEBUG' довольно ограничен и поэтому не является особенно хорошим инструментом для написания кода langauge. Вы не можете использовать в нем метки AFAIK; все адреса должны быть указаны как простой гекс (а в случае относительных прыжков вам придется самостоятельно вычислять смещение). – Michael

+0

Есть ли способ писать петлю, даже записывая адреса как простой гекс? Когда я попытался удалить ярлык и в конце цикла кода цикла я добавил: loop addressOfStartingLoopBlock Я получил неправильные результаты. – user2192774

+1

DEBUG действительно ОЧЕНЬ хороший инструмент обучения, но он не поддерживает метки, поэтому вы должны добавить их вручную. – valplo

ответ

1

debug - довольно старый отладчик. Как таковой он не позволяет вам работать, и когда вы пишете в нем код, он непосредственно записывается в память (напоминает мне о моих первых днях :)).

Поэтому, когда вы хотите написать что-то, что связано с адресами, вы должны указать адреса непосредственно.

В вашем случае вам нужно будет запомнить адрес 073f:0106, и если вы хотите прыгать или разветвляться там, вы используете его, точно так же, как вы бы использовали метку.

-a 
15E7:0100 mov si,0 
15E7:0103 mov cx, 3 
15E7:0106 mov al, [si] 
15E7:0108 dec cx 
15E7:0109 jne 15e7:0106 
15E7:010B ret 
15E7:010C 
- 

Это очень громоздкий способ написания программ, потому что если вы вставите instrutions позже, вы можете иметь проблемы с перемещением остальной частью коды и настройкой АДРЕСА.

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

Смежные вопросы