Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <ctime>
- using namespace std;
- void print(int** ptr, int rows, int cols){
- for (int i = 0; i < rows; ++i){
- for (int j = 0; j < cols; ++j){
- cout << setw(4) << ptr[i][j] << " ";
- }
- cout << endl;
- }
- }
- void create(int*** ptr, int rows, int cols){
- (*ptr) = new int*[rows];
- for (int i = 0; i < rows; ++i){
- (*ptr)[i] = new int[cols];
- for (int j = 0; j < cols; ++j){
- (*ptr)[i][j] = rand() % 100;
- }
- }
- }
- // zwroc uwage na to ,ze tworzysz tyle tablic i usuwasz tez. Patrz petla for i ,ze jedna tablica jest bez petli for !!@
- void dispose(int** ptr, int rows){
- for (int i = 0; i < rows; ++i){
- delete[] ptr[i];
- }
- delete[] ptr;
- }
- int main(int **tab,int n){
- srand((unsigned)time(0));
- int** wsk;
- int rows = 15;
- int cols = 15;
- create(&wsk, rows, cols);
- // macierz ktora zeruje wszystko
- //print(wsk, rows, cols);
- //__asm{
- // pushad
- // pushfd
- // mov ecx, rows;// ECX <- rozmiar(i - liczbwa wierszy) tablicy wskaznikow do tablic wewnetrznych
- //
- //_zewn:;// petla po tablice zezwnetrznej po i !
- // mov esi, wsk; // to jest po prostu ptr // wczytujemy do rejestru adres tablice wskaznikow na tablice wewnetrzne ( ESI <- adres bazowy tablizy wskaznikow do tablic wewnetrznych)
- // mov esi, [esi + 4 * ecx - 4];// ptr[i] // do rejestru esi wpisujemy adres bazowy tablicy wewnetrznej // ta komenda pozwala isc po ecx ktore jest wierszem czyli adresem tablicy wewnetrnzej
- // push ecx
- // mov ecx, cols; // rozmiar ptr[i] czyli jego dlugosc (j - liczba kolumn) // kolumny ( a tak naprawde to jest dlugosc (rozmiar) tablice wewnetrznej) // ecx <- rozmiar (liczba kolumn) tablic wewnetrznych
- //_wewn:;//
- // mov dword ptr[esi + 4 * ecx - 4],0
- // loop _wewn
- // pop ecx
- // loop _zewn
- // popfd
- // popad
- //}
- // macierz ktora zeruje przekatna (PATRZ NA CONTINUE I WARUNEK)
- //__asm{
- // pushad
- // pushfd
- // mov ecx, rows;// ECX <- rozmiar(i - liczbwa wierszy) tablicy wskaznikow do tablic wewnetrznych
- //_zewn:;// petla po tablice zezwnetrznej po i !
- // mov esi, wsk; // to jest po prostu ptr // wczytujemy do rejestru adres tablice wskaznikow na tablice wewnetrzne ( ESI <- adres bazowy tablizy wskaznikow do tablic wewnetrznych)
- // mov esi, [esi + 4 * ecx - 4];// ptr[i] // do rejestru esi wpisujemy adres bazowy tablicy wewnetrznej // ta komenda pozwala isc po ecx ktore jest wierszem czyli adresem tablicy wewnetrnzej
- // push ecx
- // mov ebx,ecx
- // mov ecx, cols; // rozmiar ptr[i] czyli jego dlugosc (j - liczba kolumn) // kolumny ( a tak naprawde to jest dlugosc (rozmiar) tablice wewnetrznej) // ecx <- rozmiar (liczba kolumn) tablic wewnetrznych
- //
- //_wewn:;//
- // cmp ebx, ecx
- //
- // JNZ _continue
- // mov dword ptr[esi + 4 * ecx - 4], 0
- //_continue:
- // loop _wewn
- // pop ecx
- // loop _zewn
- // popfd
- // popad
- //}
- // zerowanie tylko elementow parzystych
- __asm{
- pushad
- pushfd
- mov ecx, rows;// ECX <- rozmiar(i - liczbwa wierszy) tablicy wskaznikow do tablic wewnetrznych
- _zewn:;// petla po tablice zezwnetrznej po i !
- mov esi, wsk; // to jest po prostu ptr // wczytujemy do rejestru adres tablice wskaznikow na tablice wewnetrzne ( ESI <- adres bazowy tablizy wskaznikow do tablic wewnetrznych)
- mov esi, [esi + 4 * ecx - 4];// ptr[i] // do rejestru esi wpisujemy adres bazowy tablicy wewnetrznej // ta komenda pozwala isc po ecx ktore jest wierszem czyli adresem tablicy wewnetrnzej
- push ecx
- mov ebx, ecx
- mov ecx, cols; // rozmiar ptr[i] czyli jego dlugosc (j - liczba kolumn) // kolumny ( a tak naprawde to jest dlugosc (rozmiar) tablice wewnetrznej) // ecx <- rozmiar (liczba kolumn) tablic wewnetrznych
- _wewn:;//
- xor edx,edx
- mov eax,0
- mov edi, dword ptr[esi+4*ecx-4]
- bt edi,eax // sprawddzenie czy bit 0 w danej liczbie jest zerem. bo wtedy masz parzysta lcizbe i zerujemy, jesli jest 1 to wtedy masz
- Jc _continue
- mov dword ptr[esi + 4 * ecx - 4], 0
- _continue:
- loop _wewn
- pop ecx
- loop _zewn
- popfd
- popad
- }
- print(wsk, rows, cols);
- dispose(wsk,rows);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement