我不明白在使用32位寄存器的汇编语言编写的循环中会发生什么。这是代码:
void main() {
unsigned char Vet[100];
unsigned short int Mat = 8805;
unsigned short Ris;
__asm {
MOV AX, Mat
MOV BYTE PTR Vet[10], AL
MOV BYTE PTR Vet[13], 99
MOV BYTE PTR Vet[16], AH
LEA ESI, Vet
ADD ESI, 9
XOR EBX, EBX
MOV ECX, 3
L1: XOR BL, [ESI + 1]
ADD ESI, 3
LOOP L1
MOV Ris, BX
}
printf("\nRis: %d\n\n", Ris);
}
L1
第一次设置BL=65h
,因为BL
以0开头。好的。
我想第二次65h XOR 99h
,因为ESI=Vect[9+3+1]
。
所以我希望在FCh
中得到BL
,但编译器会返回06h
!
我用XOR
和65h
之间的简单99h
进行了测试,就像我想的那样:FCh。问题可能在Vet
索引中,但在哪里?
答案 0 :(得分:7)
它是99
,而不是99h
。 65h xor 99 = 6
。