Asembler - pytania teoretyczne

0

Mam kilka zagadnień w formie testowej, co do których nie mam pewności. Gdyby ktoś znał odpowiedź to będę wdzięczna za pomoc.

  1. Dyrektywy asemblacji warunkowej (zaznacz prawdziwe):
    a) ich użycie umożliwia wykonanie bloków programu w zależności od warunków sprawdzanych przez program
    b) wybór bloków programu źródłowego tłumaczonych na język maszynowy zależy od kombinacji warunków określonych dyrektywami
    c) blok objęty dyrektywami będzie tłumaczony przez program w zależności od sprawdzanych przez program warunków
    d) asemblacja warunkowa wykorzystuje instrukcje warunkowe języka maszynowego w celu umożliwienia wariantowości programu
    e) wybór bloków tłumaczonych na język maszynowy następuje w trakcie asemblacji programu źródłowego.

(Ja obstawiam tutaj odpowiedzi a oraz c)

  1. Dana utworzona w języku asemblera dyrektywą generacji danej użytą w konstrukcji SYMBOL: DB<wyrażenie> (zdania prawdziwe):
    a) SYMBOL uzyska wartość wyrazenia
    b) obraz komórki pamięci , której lokalizacja oznaczona została przez SYMBOL zyska wartość wyrażenia
    c) program wpisze do pamięci wartość wyrażenia
    d) zmiana wartości zmiennych wyrażenia w trakcie działania programu zmieni wartość danej generowanej dyrektywą
    e) wartością SYMBOL jest adres komórki w pamięci gdzie zostanie umieszczona wartość wyrażenia
    f) wyrażenie musi być wyliczalne w trakcie asemblacji programu

  2. Rozgałęzienie warunkowe a>=b (a,b bez znaku) powinno wykorzystac flagę (i) w następujący sposób:
    a) skok gdy flaga przepełnienia ustawiona
    b) skok gdy flaga przeniesienia ustawiona
    c) skok gdy flaga zera ustawiona
    d) skok gdy flaga zera ustawiona i przepełnienia wyzerowana
    e) skok gdy flaga przeniesienia wyzerowana
    f) skok gdy flaga znaku wyzerowana lub zera ustawiona

1
  1. Dyrektywy asemblacji warunkowej, jak nazwa wskazuje, odnoszą się do assemblacji, więc na pewno odpadają wszystkie opcje w których program ma coś robić (więc na pewno nie a i c) Jak na moje b, d i e pasują dobrze.
  2. dyrektywa DB powoduje zarezerwowanie miejsca na dane (w zależności od sekcji może być to zmienna, stała lub zmienna zainicjowana zerami). W większości przypadków (poza wspomnianą sekcją .bss) wartość pojawi się bezpośrednio w pliku wynikowym, tak więc jest inicjowana automatycznie przez program ładujący system operacyjny. W związku z tym, wartość musi być obliczona w czasie asemblacji. Natomiast symbol skojarzony z dyrektywą oznacza adres miejsca w pamięci, zarezerwowanego przez dyrektywę. Prawdziwe są zdania e i f. Zdanie b. też jest prawdziwe, zastrzegając, że komórka pamięci ma podaną wartość zanim jeszcze program zacznie być wykonywany.
  3. Tu, pytanie jest zależne od architektury, zakładam, że chodzi o x86. Tu masz opis instrukcji skoków w tej architekturze: http://unixwiz.net/techtips/x86-jumps.html , nas interesuje instrukcja jae. Jak widać sprawdzany jest warunek CF=0 CF oznacza carry flag, czyli flaga przeniesienia. Czyli b.
0
  1. b, e, na pewno nie d, bo przecież to nie są instrukcje asemblera! On tam nie wstawia żadnych skoków, tylko w ogóle tego kodu nie asembluje
  2. b, e, f
0
Shalom napisał(a):
  1. b, e, na pewno nie d, bo przecież to nie są instrukcje asemblera!

Mea culpa, masz rację, przeoczyłem. Chociaż… assembler też używa instrukcji assemblera i instrukcji warunkowych, wszystko ich używa :D No ale wiem, że pewnie nie o to chodziło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1