Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

__asm вставки (процессор Pentium) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Генерация случайного числа больше нуля, но меньше единицы http://www.cyberforum.ru/cpp-beginners/thread811477.html
Всем привет. Подскажите, как можно генерировать псевдослучайное число больше нуля, но меньше единицы. При этом количество цифр после точки должно быть от 16 до 18 включительно. Заранее всем...
C++ Исправить ошибки в связном списке Почти готовая лабораторка, но не хватает несколько деталей. Помогите решить проблему, пожалуйста! Задание : 1. Создание списка из файла. 2.Insert <елемент> n Вставка елемента в позицию n. 3.... http://www.cyberforum.ru/cpp-beginners/thread811474.html
C++ Составить программу с аппроксимацией
С пятой задачей помогите. В голову ничего не лезит
сигнатуры C++
помогите соорудить или предложите свои варианты: 1. сканирование сигнатур байт в другой программе, адрес определить никак нельзя, так как он динамический(при перезаходе в программу все адреса...
C++ Почему не стоит создавать массив объектов? http://www.cyberforum.ru/cpp-beginners/thread811460.html
Нам преподаватель сказал, что создавать массив объектов лучше не стоит(надо создавать массив указателей на объекты) так как при наследовании что-то там происходит с преобразованиями типов и привёл...
C++ Rand - рандом не повторяющихся чисел Добрый вечер.Подскажите пожалуйста как сделать что бы рандомные числа не повторялись ? Понимаю что во внутрь надо положить цикл от 0 до i-1 если совпадет то повторять .. но не магу понять как... подробнее

Показать сообщение отдельно
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
18.03.2013, 03:09  [ТС]
Скопипастил этот кусок кода в свою функцию - на этапе компиляции выдает кучу ошибок. Придется с этим разбираться... Собственно, основная функция работает, если не вызывать вложенную функцию а писать её содержимое несколько раз в коде. Хотел сделать красиво - вынести наружу, но навскидку не получилось, ни функцией ни макросом. Сама эта подфункция проста до безобразия, никаких входных-выходных параметров, использует и изменяет только один регистр, никаких окружающих контекстов не надо сохранять. Неужели нет красивого решения этого вопроса - написать не макросом а функцией несколько простейших операций с регистром без сохранения контекста в стек?
Все равно спасибо за науку, буду ковыряться дальше.

Добавлено через 40 минут
Нашел листинг - увидел много нового и интересного Не думал, что мои простые операции компилятор будет окружать таким.... вниманием
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
void expand_CL(void)
{
004BCDB0  push        ebp  
004BCDB1  mov         ebp,esp 
004BCDB3  sub         esp,0C0h 
004BCDB9  push        ebx  
004BCDBA  push        esi  
004BCDBB  push        edi  
004BCDBC  lea         edi,[ebp-0C0h] 
004BCDC2  mov         ecx,30h 
004BCDC7  mov         eax,0CCCCCCCCh 
004BCDCC  rep stos    dword ptr es:[edi] 
    __asm{
        AND CL, BIN8(00000111)
004BCDCE  and         cl,7 
        CMP CL, 3
004BCDD1  cmp         cl,3 
        JB M1
004BCDD4  jb          M1 (4BCDD8h) 
        INC CL
004BCDD6  inc         cl   
M1:     CMP CL, 7
004BCDD8  cmp         cl,7 
        JB M2
004BCDDB  jb          M2 (4BCDDFh) 
        INC CL
004BCDDD  inc         cl   
M2:             
        //POP         <registers>   //; Restore registers
        //MOV         esp, ebp      //; Restore stack pointer
        //POP         ebp           //; Restore ebp
        //RET                       //; Return from function        
        RET
004BCDDF  ret              
    }
}
004BCDE0  pop         edi  
004BCDE1  pop         esi  
004BCDE2  pop         ebx  
004BCDE3  add         esp,0C0h 
004BCDE9  cmp         ebp,esp 
004BCDEB  call        @ILT+36925(__RTC_CheckEsp) (4B1042h) 
004BCDF0  mov         esp,ebp 
004BCDF2  pop         ebp  
004BCDF3  ret
Добавлено через 51 минуту
Спасибо людям - подсказали про директиву naked - а то бы долго думал почему в мире все так несправедливо
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
__declspec( naked ) void expand_CL(void)
{   __asm{
        AND CL, BIN8(00000111)
004BCDB0  and         cl,7 
        CMP CL, 3
004BCDB3  cmp         cl,3 
        JB M1
004BCDB6  jb          M1 (4BCDBAh) 
        INC CL
004BCDB8  inc         cl   
M1:     CMP CL, 7
004BCDBA  cmp         cl,7 
        JB M2
004BCDBD  jb          M2 (4BCDC1h) 
        INC CL
004BCDBF  inc         cl   
M2:     RET
004BCDC1  ret
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru