emu8086 не распознает мои ярлыки

Я пытаюсь написать ассемблерный код, который определяет, является ли 28 совершенным числом или нет. Но у меня есть проблема. Когда я запускаю код, emu8086 не распознает мои метки.
Например, в этом коде:

mov dl,1ch
mov bl,00h ;sum
mov cl,1ch ;counter
dec cl

HERE : mov ax,00h
mov al,dl
div cl ;ax/dl ah=remainder
cmp ah,00h
je SUM ; if ah=0 jump the label SUM 
loop HERE

mov dh,00h
cmp dl,bl
je PERFECT
hlt

SUM :
add bl,cl
jmp HERE   

PERFECT :
mov dh,01
hlt

Когда должна выполняться инструкция loop HERE, emu8086 запускает первую инструкцию (mov dl,1ch) моего кода. Что я могу сделать? В чем проблема?

Заранее спасибо...


person Selin Gök    schedule 22.12.2016    source источник
comment
Остерегайтесь этой ошибки: loop HERE зависит от значения в CX, но вы никогда не инициализировали верхнюю половину этого регистра! Вы написали только mov cl,1Ch (нижняя половина CX)   -  person Sep Roland    schedule 08.01.2017


Ответы (1)


Удалите пробел между именем метки и двоеточием:

     space
       ▼
PERFECT :

Так должно быть :

    no space
       ▼
PERFECT:
person Jose Manuel Abarca Rodríguez    schedule 22.12.2016
comment
Интересно, почему emu8086 так себя ведет. Почему добавление пробела перед двоеточием приводит к тому, что он выдает другой код? - person Wayne Conrad; 22.12.2016
comment
@WayneConrad: emu8086 имеет репутацию неспособного отклонить неверный ввод. Я не использовал его, просто видел вопросы, в которых он собирал полностью фиктивный код (например, mov al, bx или что-то в этом роде, IIRC из недавнего вопроса SO, который, по утверждению OP, был собран). Я предполагаю, что HERE : ломает свою таблицу символов или что-то в этом роде, поэтому собирает ветвь к ней как к первому байту сегмента. Это делает это на самом деле хорошим вопросом, поскольку OP, похоже, использовал отладчик, чтобы увидеть, где он на самом деле разветвляется во время выполнения. Я предполагаю, что emu8086 не смог даже предупредить о синтаксической ошибке. - person Peter Cordes; 23.12.2016