汇编,循环与unsigned char矢量

时间:2016-09-08 16:31:16

标签: loops pointers assembly

我不明白在使用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! 我用XOR65h之间的简单99h进行了测试,就像我想的那样:FCh。问题可能在Vet索引中,但在哪里?

1 个答案:

答案 0 :(得分:7)

它是99,而不是99h65h xor 99 = 6