Помогите с указателями.

Тема в разделе "WASM.BEGINNERS", создана пользователем ajak, 9 мар 2009.

  1. ajak

    ajak New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2007
    Сообщения:
    463
    Привет!!!
    Помогите разобраться, ато я запутался с указателями.
    Разбираю исходник, не пойму что там делается.

    return (uint32) (*(uint16 *)(cpu.mem_page[address >>12] + (address & 10)));
    #else
    #ifdef TARGET_CPU_PPC
    return __lhbrx(cpu.mem_page[address >> 12], address & NES6502_10);

    Где там преобразование типа, как понять эту сроку с казателями

    и что это такое __lhbrx?
     
  2. mupsy

    mupsy New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    55
    lhbrx (Load Half Byte-Reverse Indexed) Instruction
    Вот те еще в помощь по этой функции:
    http://www.nersc.gov/vendor_docs/ibm/asm/lhbrx.htm
     
  3. ajak

    ajak New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2007
    Сообщения:
    463
    а с указателями поможете разобарться
     
  4. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    попробую своими словами

    return (uint32) (*(uint16 *)(cpu.mem_page[address >>12] + (address & 10)));

    cpu.mem_page[address >>12] + (address & 10) - тут вычисляется адрес. Берется значение из массива
    cpu.mem_page № (address >>12) и к нему прибавляется (address & 10)
    (uint16 *) значит - воспринимать этот адрес как указатель на uint16.

    "*" перед этими скобками означает, что нужно значение по указателю
    ну а (uint32) - это преобразование (ака явное приведение, вопрос к гуру по сям) к типу uint32.

    т.е. возвращается значение типа uint32 преобразованное из значения uint16, которое находится по адресу, вычисленному как сумма значения из массива cpu.mem_page номер (address >>12) и (address & 10)
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    ajak
    Указатель -- это адрес памяти. В твоем случае, значение двух байт, находящихся по адресу 'cpu.mem_page[address >>12] + (address & 10)' извелекается, беззнаково расширяется до четырех байт и возвращается в вызывющую ф-ию.