我正在用 x86 汇编语言编写程序并使用 MASM 进行汇编
我将一个32位值写入EAX,然后将其复制到内存位置,但它似乎没有复制整个寄存器,它只复制前两个字节,然后在内存中写入两个00字节以及上面两个字节EAX 寄存器的字节。
这是我尝试过的
.386
.model small, c
STACK_SEG SEGMENT STACK
DB 100 DUP(?)
STACK_SEG ENDS
DATA_SEG SEGMENT USE16 'DATA'
ARRAY DB 10000 DUP(0FFh)
DATA_SEG ENDS
.CODE
CODE_SEG SEGMENT USE16 'CODE'
ASSUME CS:CODE_SEG, DS:DATA_SEG
START:
MOV AX, DATA_SEG
MOV DS, AX
MAIN PROC
LEA DI, ARRAY
MOV EAX, 0FF010101h
MOV [EDI], EAX
MAIN ENDP
MOV AX, 04C00h
INT 021h
CODE_SEG ENDS
END START
知道为什么要这样做吗?
编辑:我正在使用 DOSBox 来运行我的代码
已解决:显然这是 CodeView 版本中的一个已知错误,CodeView 是我使用的 DOS(DOSBox) 附带的调试器,它会导致通用 32 位寄存器中的高 16 位在单步模式下被损坏。
参见这个问题。