谁能告诉我 emu8086 中的这段代码有什么问题?

Can anybody tell me what's wrong with this code in emu8086?

我似乎无法 运行 我在 emu8086 中的代码。谁能看看我的代码并找出问题所在?

org 100h

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



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

您的代码中遇到了这些问题:

  1. ret 在你的代码之前

    ret 将从子例程中 return 因此程序不会执行此指令,除非堆栈已被篡改。

  2. 缺少起始地址

    你得到了 org 100h 但在那里放置了变量......你的代码在它们之后开始但是你没有任何标签可以跳转到......

  3. 数据类型mish-mash

    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: 行可能看起来有点不同。