MOV 指令不会将整个寄存器复制到内存中

问题描述 投票:0回答:1

我正在用 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 来运行我的代码

assembly x86 masm
1个回答
0
投票

已解决:显然这是 CodeView 版本中的一个已知错误,CodeView 是我使用的 DOS(DOSBox) 附带的调试器,它会导致通用 32 位寄存器中的高 16 位在单步模式下被损坏。

参见这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.