Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Битовые операции в ассемблере (под vs 2012)

88K
20 декабря 2013 года
Katori
2 / / 20.12.2013
Здравствуйте, дело в том, что практически не разбираюсь в ассемблере, а сегодня сдача лаб, хотелось бы узнать, как делаются подобные задачи: "С помощью логических операций реализуйте запись битов в данной ячейки памяти, размером в 2 байта, в обратном порядке."
На примере, если можно.
Заранее спасибо.
11K
21 декабря 2013 года
xAtom
65 / / 17.01.2011
Вот тебе накидал код только для 32-битного компилера, то бишь 64-разрядная студия не стала поддерживать встроенный 64-итный ASM, если только не использовать внешние модули.
Код:
#include <stdio.h>
#include <stdlib.h>
typedef unsigned short _ushort;

#ifndef _X86_
#error [Только x86]
#endif

// инверсия
__declspec(naked) _ushort __cdecl inverse_bits(_ushort) {
    __asm {
        push ebp
        mov  ebp, esp
        push dx
        push bx
        xor  ax, ax
        mov  bx, word ptr [ebp + 8]
__next:
        mov dx, bx
        and dx, 1    // dx & 1
        or  ax, dx   // ax | dx
       
        shr  bx, 1   // bx >> 1
        jz  __end;

        shl ax, 1   // ax << 1
        jmp __next;
__end:
        pop bx
        pop dx
        pop ebp
        ret
    };
}


int main(void){
    char buf[17];
    _ushort a = (_ushort)-49;

    puts(itoa((int)a, buf, 2));
    a = inverse_bits(a);
    puts(itoa((int)a, buf, 2));
    a = inverse_bits(a);
    puts(itoa((int)a, buf, 2));
    return 0;
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог