1. (5 points) Dysponując fragmentem dokumentacji z MSDN i fragmentem kodu z danymi wskaż poprawne użycie funkcji WriteConsoleOutputCharacter
WriteConsoleOutputCharacter function Copies a number of characters to consecutive cells of a console screen buffer, beginning at a specified location.
Syntax
BOOL WINAPI WriteConsoleOutputCharacter(
_In_ HANDLE hConsoleOutput,
_In_ LPCTSTR lpCharacter,
_In_ DWORD nLength,
_In_ COORD dwWriteCoord,
_Out_ LPDWORD lpNumberOfCharsWritten
);
(Opisy parametrów pominięte dla zachowania układu strony - tekst widoczny na screenie)
-
●
INVOKE WriteConsoleOutputCharacter, outHandle, ADDR buffer, BufSize, xyPos, ADDR cellsWritten
- INVOKE WriteConsoleOutputCharacter, outHandle, OFFSET buffer, BufSize, xyPos, cellsWritten
- INVOKE WriteConsoleOutputCharacter, outHandle, OFFSET buffer, OFFSET xyPos, OFFSET cellsWritten
- żadne z powyższych.
1. (5 points) Zastosowanie programowania asemblerowego (zaznacz prawidłowe odpowiedzi)
-
x
gdy korzysta się z rozkazów procesora, jakie nie są dostępne w językach wyższego poziomu
- gdy jest potrzeba tworzenia przenośnego kodu (np. na inne procesory i systemy operacyjne)
- gdy nie znamy rozkazów procesora
- gdy nie dysponujemy żadnym kompilatorem języka wysokiego poziomu (np. na nowym typie procesora)
2. (5 points) Jakie etapy są potrzebne w utworzeniu pliku .exe w sytuacji gdy program składa się tylko z jednego pliku .asm?
- żadne z powyższych (z pliku .asm nie da się utworzyć pliku .exe).
- tylko konsolidacja
-
●
asemblacja i konsolidacja
- tylko asemblacja
3. (5 points) Co oznacza „stdcall” w kontekście MASM32?
-
●
Konwencję wywoływania procedur, w której stos zarządza argumentami
- Standardowy plik wykonywalny dla systemu Windows
- Rodzaj przerwania sprzętowego
- Typ danych w architekturze 32-bitowe
4. (5 points) Co się stanie, jeśli linker nie znajdzie symbolu zewnętrznego (external)?
- Program uruchomi się, ale z błędami
- Symbol zostanie zignorowany
-
●
Proces linkowania zakończy się błędem
- Linker wygeneruje pusty plik wykonywalny
5. (5 points) Etap realizacji odwołań do symboli zewnętrznych poprzez związanie tych odwołań z symbolami udostępnianymi przez moduły, w których je zdefiniowano, to:
- asemblacja
-
●
konsolidacja
- interpretacja
- żadne z powyższych
6. (5 points) Jaka jest rola instrukcji ret/ret N w procedurze (zaznacz wszystkie pasujące odpowiedzi):
-
x
odłożenie wartości z wierzchołka stosu do rejestru EIP
- zachowanie w procedurze wartości rejestrów ogólnego przeznaczenia (na stos)
- pobranie z wierzchołka stosu wartości do rejestrów ogólnego przeznaczenia
-
x
skorygowanie wierzchołka stosu (rejestru ESP) o podaną liczbę N
(10) 1. Określ czy następujące linie kodu są poprawne w MASM32 (zaznacz prawidłową odpowiedź):
.data
zmA DWORD 1
zmB DWORD 2
zmC WORD 3
zmD DW ?
tablica db 1,2,3,4,0
.code
| mov eip,zmA | Nie (Tak/Nie) |
| mov esi,zmC | Nie (Tak/Nie) |
| push al | Nie (Tak/Nie) |
| cdq | Tak (Tak/Nie) |
| add eax,zmB | Tak (Tak/Nie) |
| mov zmA,zmD | Nie (Tak/Nie) |
| xor edx,edx | Tak (Tak/Nie) |
| div eax,ebx | Nie (Tak/Nie) |
| cld | Tak (Tak/Nie) |
| pop zmA | Tak (Tak/Nie) |
| mov al,tablica[1] | Tak (Tak/Nie) |
(5) 2. Które instrukcje są częścią zestawu x86?
(5) 3. Który z poniższych rejestrów odpowiada za przechowywanie wskaźnika stosu w procesorach x86?
4. Czym jest segmentacja w architekturze x86?
- Technika przyspieszania operacji na liczbach zmiennoprzecinkowych
- Podział procesora na jednostki wykonawcze
- Wykorzystanie pamięci podręcznej
-
●
Mechanizm dzielenia pamięci na segmenty kodu, danych i stosu
5. Co oznacza dyrektywa EXTERN w MASM32?
-
●
Deklaruje funkcje lub zmienne zdefiniowane w innym module
- Tworzy zmienną globalną
- Usuwa zmienne z pamięci
- Definiuje segment danych
6. Jaką funkcję pełni WinMain w programach MASM32?
-
●
Jest punktem wejścia w aplikacjach Windows GUI
- Tworzy okno konsolowe
- Obsługuje przerwania systemowe
- Deklaruje stos
7. Jakie rejestry są wykorzystywane przez koprocesor w x86 i dostępne dla programisty w koprocesorze?
- x ST(0) - ST(7)
- EAX, EBX
- RL9
- RAX, RBX
8. Czym charakteryzuje się architektura x86?
- x Architekturą CISC (Complex Instruction Set Computer)
- Architekturą RISC (Reduced Instruction Set Computer)
- Wsparciem dla szerokiego zestawu instrukcji
- Natywną obsługą 64-bitowego trybu pracy
(5) 9. Jaka będzie zawartość rejestru DL po wykonaniu następującego fragmentu kodu
mov dl,5
shl dl,2
(5) 10. Jaka będzie zawartość rejestru EAX po wykonaniu następującego fragmentu kodu
xor edx,edx
cmp edx,0
jnz e1
mov eax,1
jmp e2
e1:
mov eax,2
inc eax
e2:
(5) 11. Rozkaz, który zapisuje wartość z odpowiednio EAX do miejsca w pamięci wskazywanego przez EDI to:
- mov edi,eax
- ● mov [edi],eax
- mov eax,edi
- mov [eax],edi
(5) 12. Jaka będzie zawartość rejestru AL po wykonaniu następującego fragmentu kodu
mov al,6
or al,00110000b
- 00110000b
- ● 00110110b
- 00000110b
- 00000000b
(5) 13. Jaka będzie zawartość rejestru EAX po wykonaniu następującego fragmentu kodu:
mov eax,0
mov ecx,4
xor ecx,ecx
petla:
add eax,1
loop petla
- 0
- 1
- 4
- 255
- 256
- 2¹⁶ - 1
- 2¹⁶
- 2³² - 1
- ● 2³²
(5) 14. Jaka będzie wartość rejestru dl po wykonaniu następującego fragmentu kodu?
mov dl,3Fh
ror dl,4
- DL = 3Fh
- DL = F5h
- ● DL = F3h
- DL = 89h.
(5) 15. Jaka będzie wartość rejestru ax po wykonaniu następującego fragmentu kodu?
.data
myDouble DWORD 12345678h
.code
mov ax,WORD PTR [myDouble+2]
- AX = 7856h
- AX = 3412h
- AX = 5678h
- ● AX = 1234h.
(5) 16. Rozkaz, wykonujący dzielenie z zachowaniem znaku to:
----------------------------------------
IDIV
[5] Jaka będzie wartość rejestru ecx po wykonaniu następującego fragmentu kodu?
.data
array1 WORD 30 DUP(?),0,0
.code
mov ecx,SIZEOF array1
- ECX = 2
- ECX = 30
- ● ECX = 64
- ECX = 3
- ECX = 33
- niepoprawna instrukcja.