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

Видео драйвер с++ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ map <string[],double> http://www.cyberforum.ru/cpp-beginners/thread542480.html
Возникла необходимость в конструкции вида: =>значение выбрал map <string,double> но как определять элементы никак не разберусь например map <string,double> a; string str1.str2; string mas={str1,str2}; a=120;
C++ NULL указатель Идея состоит в том чтобы создать класс Стек на основе односвязного списка. Строка с 0xc0000005 № 36. Не могу найти в чем проблема, может кто поопытней подскажет. #include <iostream> #include <malloc.h> #include <windows.h> using namespace std; template <class T> class Stack { http://www.cyberforum.ru/cpp-beginners/thread542474.html
C++ Конструкторы и деструкторы
#include <iostream> #include <Windows.h> class Try { public: void* px; Try() { printf("Try\n"); px=malloc(12); }; Try operator+(int b) {
C++ Функция round(), округление числа до 4-х знаков после запятой
Вот наткнулся на проблемку как округлить число до 4 знаков после запятой? Подскажите что делать?
C++ Составить программу, которая позволяет ввести с клавиатуры шестнадцатеричное число и записать его в переменную a, выполнить требуемую проверку. http://www.cyberforum.ru/cpp-beginners/thread542462.html
Составить программу, которая позволяет ввести с клавиатуры шестнадцатеричное число и записать его в переменную a типа unsigned. Выполнить необходимые проверки для данного числа: Проверить, установлен ли 11 или 15 бит в “1”. Включить 1, 3, 5, 6, 8, 10, 11, 12 и 13 биты, не изменяя остальных, записав результат в переменную b. Помогите пожалуйста разобраться с этими масками.
C++ Очень стремная задача На плоскости задано N точек, которые пронумерованы слева на право (а при равных абсциссах снизу вверх). Нужно создать программу, которая строит многоугольник, который является выпуклой их оболочкой, не более чем за C*N действий. подробнее

Показать сообщение отдельно
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.04.2012, 22:45     Видео драйвер с++
Цитата Сообщение от aram_gyumri Посмотреть сообщение
Kuzia domovenok, при написании ОС нужно реализовывать все с нуля, и посколько работа с памятю будет написана собственноручно то и memsetа у вас нету
Я ещё раз спрошу, какая разница, вызову я memset или открою в VisualStudio замечательный файл memset.asm и скопирую оттуда следующий код. Присмотрись: ты видишь, чтобы тут использовалось что-то специфичное для ОС??? Почему его запрещено использовать?
Assembler
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
        page    ,132
        title   memset - set sections of memory all to one byte
;***
;memset.asm - set a section of memory to all one byte
;
;       Copyright (c) Microsoft Corporation. All rights reserved.
;
;Purpose:
;       contains the memset() routine
;
;*******************************************************************************
 
        .xlist
        include cruntime.inc
        .list
 
page
;***
;char *memset(dst, value, count) - sets "count" bytes at "dst" to "value"
;
;Purpose:
;       Sets the first "count" bytes of the memory starting
;       at "dst" to the character value "value".
;
;       Algorithm:
;       char *
;       memset (dst, value, count)
;               char *dst;
;               char value;
;               unsigned int count;
;               {
;               char *start = dst;
;
;               while (count--)
;                       *dst++ = value;
;               return(start);
;               }
;
;Entry:
;       char *dst - pointer to memory to fill with value
;       char value - value to put in dst bytes
;       int count - number of bytes of dst to fill
;
;Exit:
;       returns dst, with filled bytes
;
;Uses:
;
;Exceptions:
;
;*******************************************************************************
 
        CODESEG
 
    extrn   _VEC_memzero:near
    extrn   __sse2_available:dword
 
        public  memset
memset proc \
        dst:ptr byte, \
        value:byte, \
        count:dword
 
        OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
        .FPO    ( 0, 3, 0, 0, 0, 0 )
 
        mov     edx,[esp + 0ch] ; edx = "count"
        mov     ecx,[esp + 4]   ; ecx points to "dst"
 
        test    edx,edx         ; 0?
        jz      short toend     ; if so, nothing to do
 
        xor     eax,eax
        mov     al,[esp + 8]    ; the byte "value" to be stored
 
; Special case large block zeroing using SSE2 support
    test    al,al ; memset using zero initializer?
    jne     dword_align
    cmp     edx,0100h ; block size exceeds size threshold?
    jb      dword_align
    cmp     DWORD PTR __sse2_available,0 ; SSE2 supported?
    je      dword_align
 
    jmp     _VEC_memzero ; use fast zero SSE2 implementation
    ; no return
 
; Align address on dword boundary
dword_align:
 
        push    edi             ; preserve edi
        mov     edi,ecx         ; edi = dest pointer
 
        cmp     edx,4           ; if it's less then 4 bytes
        jb      tail            ; tail needs edi and edx to be initialized
 
        neg     ecx
        and     ecx,3           ; ecx = # bytes before dword boundary
        jz      short dwords    ; jump if address already aligned
 
        sub     edx,ecx         ; edx = adjusted count (for later)
adjust_loop:
        mov     [edi],al
        add     edi,1
        sub     ecx,1
        jnz     adjust_loop
 
dwords:
; set all 4 bytes of eax to [value]
        mov     ecx,eax         ; ecx=0/0/0/value
        shl     eax,8           ; eax=0/0/value/0
 
        add     eax,ecx         ; eax=0/0val/val
 
        mov     ecx,eax         ; ecx=0/0/val/val
 
        shl     eax,10h         ; eax=val/val/0/0
 
        add     eax,ecx         ; eax = all 4 bytes = [value]
 
; Set dword-sized blocks
        mov     ecx,edx         ; move original count to ecx
        and     edx,3           ; prepare in edx byte count (for tail loop)
        shr     ecx,2           ; adjust ecx to be dword count
        jz      tail            ; jump if it was less then 4 bytes
 
        rep     stosd
main_loop_tail:
        test    edx,edx         ; if there is no tail bytes,
        jz      finish          ; we finish, and it's time to leave
; Set remaining bytes
 
tail:
        mov     [edi],al        ; set remaining bytes
        add     edi,1
 
        sub     edx,1           ; if there is some more bytes
        jnz     tail            ; continue to fill them
 
; Done
finish:
        mov     eax,[esp + 8]   ; return dest pointer
        pop     edi             ; restore edi
 
        ret
 
toend:
        mov     eax,[esp + 4]   ; return dest pointer
 
        ret
 
memset  endp
 
        end
 
Текущее время: 01:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru