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

时间:2018-03-22 07:45:25

标签: emu8086

我似乎无法在emu8086中运行我的代码。任何人都可以查看我的代码并找出错误的原因吗?

org 100h

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



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

1 个答案:

答案 0 :(得分:0)

您的代码中存在以下问题:

    在您的代码之前
  1. ret

    ret将从子程序返回,因此除非堆栈被篡改,否则程序将不会执行此指令。

  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]
    

    或只是获得偏移量。我们也不知道你的编译器语法......

  5. 我会将您的计划更改为:

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