【发布时间】:2018-11-10 17:30:15
【问题描述】:
这是我添加两个 8 字节数字的程序的代码。
.model small
.100h
.data
num1 dq 1234567812345678h
num2 dq 1234567854636732h
num3 dq ?
.code
mov ax,@data
mov ds,ax
mov ax,num1
add ax,num2
mov bx,num1+2
adc bx,num2+2
mov cx,num1+4
adc cx,num2+4
mov dx,num1+6
adc dx,num2+6
mov num3,ax
mov num3+2,bx
mov num3+4,cx
mov num3+6,dx
end
由于某种原因,它说定义我的变量时出错:
(3) illegal instruction: num1 dq 1111111123145678h or wrong parameters.
(4) illegal instruction: num2 dq 1111111123145678h or wrong parameters.
(5) illegal instruction: num3 dq ? or wrong parameters.
(9) wrong parameters: MOV ax,num1
(9) probably no zero prefix for hex; or no 'h' suffix; or wrong addressing; or undefined var: num1
有人知道它有什么问题吗?
【问题讨论】:
-
您可以改用两个
dd指令。请记住,8086 是一种小端架构,因此最不重要的 dword 排在最前面。 -
如果我使用两个 dd 指令,我将无法将加法的结果保存在一个变量中..
-
汇编中没有变量,只有内存。无论您是通过单个
dq还是通过两个dd保留8 个字节,都将在内存中定义相同的8 个字节。像num1这样的标签是指向内存中第一个字节的内存“书签”,它们不是像保存某种类型或保护某些东西那样的“变量”,只是您可以随意使用的内存地址。所以在汇编dq 123456789ABCDEF0h=dd 9ABCDEF0h, 12345678h中,生成的机器代码是相同的。 (MASM 确实在一定程度上保护了标签的“类型”,但这是 x86 可用的 20 个汇编程序中的单个汇编程序,所以谁在乎……) -
Tania,请编辑问题以添加回答问题所需的所有信息信息 - 您评论中的错误消息以及您正在使用的汇编程序。
-
是的,这个问题实际上很合理,你能提供额外的细节吗,尤其是在汇编中可以让整个世界变得不同......你可能想阅读minimal reproducible example并通过它来解决你的问题.