谁能告诉我 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
您的代码中遇到了这些问题:
ret
在你的代码之前
ret
将从子例程中 return 因此程序不会执行此指令,除非堆栈已被篡改。
缺少起始地址
你得到了 org 100h
但在那里放置了变量......你的代码在它们之后开始但是你没有任何标签可以跳转到......
数据类型mish-mash
db
表示8位值,dw
表示16位值。如果使用 8 位或 16 位访问,一些编译器会检查这一点...因此,如果您使用 mov ax,variable1
,即 16 bit <- 8 bit
,编译器会抛出错误或警告或其他任何内容。
无背景信息
因为我们不知道你想做什么,所以我们只能猜测。例如
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:
行可能看起来有点不同。
我似乎无法 运行 我在 emu8086 中的代码。谁能看看我的代码并找出问题所在?
org 100h
variable1 db 9h
variable2 db 5
variable3 db 1342h
ret
mov ax, variable1
mov bl, variable2
mov cx, variable3
您的代码中遇到了这些问题:
ret
在你的代码之前ret
将从子例程中 return 因此程序不会执行此指令,除非堆栈已被篡改。缺少起始地址
你得到了
org 100h
但在那里放置了变量......你的代码在它们之后开始但是你没有任何标签可以跳转到......数据类型mish-mash
db
表示8位值,dw
表示16位值。如果使用 8 位或 16 位访问,一些编译器会检查这一点...因此,如果您使用mov ax,variable1
,即16 bit <- 8 bit
,编译器会抛出错误或警告或其他任何内容。无背景信息
因为我们不知道你想做什么,所以我们只能猜测。例如
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:
行可能看起来有点不同。