Кто-нибудь может сказать мне, что не так с этим кодом в emu8086?

Я не могу запустить мой код в emu8086. Кто-нибудь может взглянуть на мой код и выяснить, что не так?

org 100h

variable1 db 9h
variable2 db 5
variable3 db 1342h
ret      



mov ax, variable1
mov bl, variable2
mov cx, variable3

1 ответ

Решение

У вас есть эти проблемы в вашем коде:

  1. retперед вашим кодом

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

  2. отсутствует начальный адрес

    ты получил org 100h но поместили туда переменные... ваш код начинается после них, но у вас нет метки для перехода к...

  3. типы данных миш-маш

    db означает 8-битное значение и dw означает 16-битное значение. Некоторые компиляторы проверяют это, если используются 8-битным или 16-битным доступом... так что если вы используете mov ax,variable1 который 16 bit <- 8 bit Компилятор выдает ошибку или предупреждение или что-то еще.

  4. нет справочной информации

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

    mov ax,variable1
    

    означает, что вы хотите получить доступ к памяти в variable1 лайк

    mov ax,[cs:variable1]
    

    или просто получить смещение. Также мы не знаем синтаксис вашего компилятора...

Я бы изменил вашу программу на:

    org 100h

    mov ax, variable1
    mov bl, variable2
    mov cx, variable3
    ret      

    variable1 dw 9h
    variable2 db 5
    variable3 dw 1342h

или же:

    org 100h

    variable1 dw 9h
    variable2 db 5
    variable3 dw 1342h

start:

    mov ax, variable1
    mov bl, variable2
    mov cx, variable3       
    ret      

первый используется call 100h а второй call start, Не уверен, как метки определены в синтаксисе вашего компилятора, так что start: линия может выглядеть немного иначе.

Другие вопросы по тегам