我正在尝试创建一个获取两个输入数字的程序,将它们相乘(将结果存储在变量中),将它们分开(将结果存储在另一个变量中)并打印结果。
我遇到的问题是第一行代码push num1
返回invalid instruction operands
:
.data
num1 db "Enter a number:"
num2 db "Enter another number:"
.data?
buffer1 dd 100 dup(?) ; this is where I store input for num1
buffer2 dd 100 dup(?) ; " " num2
.code
start:
push num1 ; here is where it returns the error
call StdOut ;I want to print num1 but it doesn't get that far.
; later on in my code it does multiplication and division.
push buffer1 ; I push buffer1
call StdIn ; so that I can use it for StdIn
; I repeat this for num2
; I then use those 2 numbers for multiplication and division.
为什么会导致此错误?
答案 0 :(得分:3)
start:
push offset num1
call Stdout
; or
lea eax, num1
call StdOut
;this:
push num1
; is pushing the letter 'E' I believe.
; here is where it returns the error
call StdOut
; this is wrong also:
push buffer1 ; I push buffer1 <<< no, you are trying to push the val of buffer1
call StdIn ; so that I can use it for StdIn
; you need to pass an address of the label (variable)
; so either
lea eax, buffer1
push eax
call StdIn
; or
push offset buffer1
call StdIn
答案 1 :(得分:1)
错误信息非常清楚,操作数无效。 你不能这样做:
push num1
操作码“push”有效,但在x86指令集中,您只能推送某些寄存器,而不是字节序列(字符串)。你的num1是一个字节序列。
例如:
push ax
是有效的指令和有效的操作数。
您可以推送的有效寄存器示例:AH,AL,BH,BL,CH,CL,DH,DL,AX,BX,CX,DX等