Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 4. 7B05
- 5. 1010000011110010
- 6. 1111001010100000\
- zad.14 adres w trybie rzeczywistym
- 1) by otrzymać adres fizyczny mnożę liczbę z CS o 16(czyli w zapisie szesnastkowym dodaje jedno zero): 0xAAAB -> 0xAAAB0
- 2) do tego wyżej ^ dodaję (niezmieniony) rejestr IP - 0x0669 (cały czas szesnastkowo!!!!!)
- 3) 0xAAAB0+0x0669 = 0xAB119
- react-text: 1742 https://pl.wikipedia.org/wiki/Tryb_rzeczywisty
- zad. 10 - 13
- rcl/rcr - przesuwają zawartość danego rejestru odpowiednio w lewo/prawo (ROTATE CARRY LEFT/RIGHT) o wskazana ilość pozycji.
- liczba która wylatuje (w prawo albo lewo) leci do flagi carry, a do miejsca które się zwolniło z przeciwnej strony wpada poprzednia zawartośc carry (dlatego podaje to w treści zadania).
- np. C=1 ax = 1000 1000 1000 1000 ;
- rcr ax,1 => ax = X100 0100 0100 0100
- X to jest to zwalniane miejsce. wpada do niego C czyli 1. a potem do C wpada to co wyleciało z prawej strony --- ZERO
- UWAGA al i ah są cześcią ax. jeżeli mam AX = 0x1756 to AH = 0x17 a AL = 0x56. jeżeli robię rcl/rcr tylko na AL to AH zostaje bez zmian!!
- 10 - AX=0x1756 . AL = 0101 0110, przesuwam o jeden w lewo -> AL=1010 1101 . (ostatnia jedynka oczywiście z carry) === 0xAD
- ==> AX = AH:AL = 0x17AD
- 11 - AX = 0001 0111 0101 0110 (C = 1)
- trzy razy w prawo
- AX = 1010 0010 1110 1010 C=1
- 12. popf ustawia flagi zgodnie z wartościa, którą bierze ze stosu. te carry chyba(!) jest najbardziej po prawej, więc weźmie sobie jedynkę z tego FF. czyli CARRY=1 a reszta bez zmian
- 13. sahf - bierze zawartość flag z ah czyli lewej częsci ax - czyli FF, czyli tak jak wyżej.
- zad 15-16
- 15.
- najlepiej na początku rozpisać adres logiczny - początkowy:
- 0x004020F0 = 0000 0000 0100 0000 0010 0000 1111 000
- interesuje nas pierwsze 10 bitów, drugie 10 bitów, potem 12 bitów:
- (0000 0000 01) (00 0000 0010) (0000 1111 000)
- pierwsze 10 bitów - numer PDE == 1. otwieramy PDE nr 1. (żeby nie było wątpliwości to zostało już otwarte...)
- w otwartym PDE szukamy INDEKSU PTE równego tym drugim dziesięciu bitom, czyli podsumowując: w PDE nr 1 szukamy PTE nr 2
- adres bazowy odszukanego PTE to 0x00100. do tego adresu dodaję te ostatnie 12 bitów. 0x00100 + 0x0F0 -> 0x001F0
- 16.
- w poprzednim dostaliśmy PDE nr 1 już otwarte. tutaj mamy znaleźć adres PDE do otworzenia. które PDE mam otworzyć? pierwsze 10 bitów, tj. 1. czyli otwieram PDE (tablicę stron) 0x01000000
- w zadaniu 16. znalazłem adres PDE do otworzenia i go otworzyłem. mam takie coś jak w zadaniu 15. gdybym chciał teraz znaleźć ADRES STRONY to znajduje PTE o numerze równym drugim 10 bitom. jeżeli chcę znaleźć adres fizyczny mojego adresu logicznego to do ADRESU STRONY dodaję OSTATNIE 12 BITOW.
- piszę o tym, ponieważ w zad 16 pyta o adres tablicy stron, ale równie dobrze może zapytać o adres strony - wtedy (tak jak wyżej) jedna operacja więcej. jeżeli o adres fizyczny mojego adresu logicznego - jeszcze jedna operacja więcej
- /react-text by pogłębić zrozumienie tematu odsyłam do specjalistycznej strony google
- np. react-text: 1994 http://students.mimuw.edu.pl/.../PAMIEC/PODTEMAT_7/opis.html
- 17 i 18. Bit Accessed jest ustawiany, gdy występuje odwołanie do strony, zaś bit dirty gdy występuje modyfikacja/zapis pamięci. Więc odpowiedzi to: 17. 1 i 1, 18. 1 i 0. Jeśli się mylę to poprawicie.
- podpowiedź: zwracana przez maina wartość jest zawsze w eax
- 27. a2+3*7-b1-b2+*/
- 0xFA=11111010=-128+64+32+16+8+2.=-6
- ZAD 7 DX=-1 | ZAD 8 AX=-1 BX=1 | ZAD 9 BX=0xC557 |
- w AL masz -1 czyli 0xFF polecenie ebw rozszerza bit znaku z AL do AH w AH mamy teraz 0xFF wiec AX ma wartość 0xFFFF czyli -1 gdyby AL było dodatnie to w AH mielibyśmy 0x00 a w AX 0x00FF
- /react-text 23: odp. 4
- do ebxa załadowano wskaźnik na x (początek ciągu bajtów). ebx został zwiększony o trzy, czyli wskaźnik został przesunięty o 3 bajty do przodu. z 1 na 2... na 3... na 4.
- czyli ebx wskazuje na 4. od al (prawa część ax) ładujemy zawratość pod tym wskaźnikiem. wskazuje na 4 więc do al leci liczba 4.
- ponieważ funkcja nazywa się main to znaczy, że jest wykonywana z biblioteką C, gdzie konwencja jest taka, że ax(eax) zawiera zwracaną wartość. cześć lewa ax'a (czyli ah) została wyzerowana. w części prawej ax'a(czyli al) jest ta 4. czyli zwrócona została 4
- 28: funkcja bierze ze stosu. na stos wrzuciliśmy eax kiedy eax było równe 5. czyli w edxie (zwrocie z funkcji) będzie silnia 5 =120. to że eax przed wywołaniem był zmieniany nie ma znaczenia - liczy się to co zostało ostatnio wrzucone na stos
- 29: funkcja bierze z eaxa. więc to co wrzuciliśmy wcześniej na stos się nie liczy. w momencie wywołania silnii w eaxie jest 4 więc będzie silnia z 4
- wszystkie odpowiedzi poprawcie mnie jeśli jest gdzieś błąd zad 1 a=67 b=-6 | zad 2 cl=3 | zad 3 40978 | zad 4 0x7B05 | zad 5 0xA0F2=1010000011110010 | zad 6 0xF2A0=1111001010100000 | zad 7 DX=-1 | zad 8 AX=-1 BX=1 | zad 9 BX=0xC557 | zad 10 0x17AD | zad 11 0xA2EA= 1010 0010 1110 1010 | zad 12 AX= 0x807F | zad 13 AX=0xFF80 | zad 14 0xAB119 | zad 15 0x001F0 | zad 16 0x01000000 | zad17 A=1 D=1 | zad 18 A=1 D=0 | zad 19 eax=0 ebx=1 |zad 20 eax=7 ebx=0 |zad 21 wierzchołek=1 | zad 22 wierzchołek=0 | zad 23 4 |zad 27 a2+3*7-b1-b2+*/ | zad 28 EAX=5! | zad 29 EAX=4!
- No to tak rcl przesuwa w lewo i bit przeniesienia laduje na ostatnim bicie, a rcr przesuwa w prawo i bit przebiesienia laduja na najstarszym bicie. 1. 0110 Cf=1 rcl 1101 cf=0. 2. 0110 cf=1 1011 cf=0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement