Информация об изменениях

Сообщение Почему значение первого байта, может не совпадать? от 05.11.2018 14:08

Изменено 05.11.2018 14:09 nen777w

Почему значение первого байта, может не совпадать?
  "Код"
#include <stdio.h>

int main()
{
unsigned int lbl_begin;
__asm { mov dword ptr lbl_begin, offset l_begin };

__asm jmp l_end;
l_begin:
__asm _emit 0x00;
__asm _emit 0x01;
__asm _emit 0x02;
__asm _emit 0x03;
l_end:

unsigned char c0 = ((unsigned char*)lbl_begin)[0];
if (c0 == 0x00) printf("Equal\n"); else printf("Not Equal\n");
unsigned char c1 = ((unsigned char*)lbl_begin)[1];
if (c1 == 0x01) printf("Equal\n"); else printf("Not Equal\n");
unsigned char c2 = ((unsigned char*)lbl_begin)[2];
if (c2 == 0x02) printf("Equal\n"); else printf("Not Equal\n");
unsigned char c3 = ((unsigned char*)lbl_begin)[3];
if (c3 == 0x03) printf("Equal\n"); else printf("Not Equal\n");

return 0;
}


У меня иногда печатает:

Equal, Equal, Equal, Equal

а иногда

Not Equal, Equal, Equal, Equal


Оптимизации отключены. С чем это может быть связяно?
Почему значение первого байта, может не совпадать?
  "Код"
#include <stdio.h>
int main()
{
    unsigned int lbl_begin;
    __asm { mov dword ptr lbl_begin, offset l_begin };

    __asm jmp l_end;
l_begin:
    __asm _emit 0x00;
    __asm _emit 0x01;
    __asm _emit 0x02;
    __asm _emit 0x03;
l_end:

    unsigned char c0 = ((unsigned char*)lbl_begin)[0];
    if (c0 == 0x00) printf("Equal\n"); else printf("Not Equal\n");
    unsigned char c1 = ((unsigned char*)lbl_begin)[1];
    if (c1 == 0x01) printf("Equal\n"); else printf("Not Equal\n");
    unsigned char c2 = ((unsigned char*)lbl_begin)[2];
    if (c2 == 0x02) printf("Equal\n"); else printf("Not Equal\n");
    unsigned char c3 = ((unsigned char*)lbl_begin)[3];
    if (c3 == 0x03) printf("Equal\n"); else printf("Not Equal\n");

    return 0;
}


У меня иногда печатает:

Equal, Equal, Equal, Equal

а иногда

Not Equal, Equal, Equal, Equal


Оптимизации отключены. С чем это может быть связяно?