将作业题询问了一下new bing,做个记录方便查阅
MOV [BX][SI],2这个指令合法吗?
你说的目的操作数的长度未指定什么意思?
目的操作数的长度指的是目的操作数所占用的字节数。在x86汇编语言中,操作数可以是字节(8位)或字(16位)。在指令中,如果目的操作数是内存地址,那么必须明确指定其长度。例如,
MOV BYTE PTR [BX][SI], 2
或MOV WORD PTR [BX][SI], 2
。这样,处理器才能知道应该将多少个字节的数据写入内存。
这里的[BX][SI]是什么意思?
[BX][SI]
是一种基址变址寻址方式。它表示的是一个内存地址,该地址由BX
和SI
寄存器的值相加得到。例如,如果BX
的值为0x1000
,而SI
的值为0x200
,则[BX][SI]
表示内存地址0x1200
。
那[BX][SI]是一个字节类型的存储单元吧?为什么2不会默认为字节存储进去,而要MOV BYTE PTR [BX][SI], 2 或 MOV WORD PTR [BX][SI], 2
[BX][SI]
表示的内存地址可以指向一个字节或一个字,具体取决于指令中指定的操作数长度。在x86汇编语言中,立即数2
可以表示为一个字节或一个字,具体取决于指令中指定的操作数长度。因此,必须使用BYTE PTR
或WORD PTR
来明确指定操作数的长度。例如,如果您想将立即数2
作为一个字节存储到内存地址[BX][SI]
处,则应使用指令MOV BYTE PTR [BX][SI], 2
。如果您想将立即数2
作为一个字存储到内存地址[BX][SI]
处,则应使用指令MOV WORD PTR [BX][SI], 2
。