Odejmowanie w asemblerze i etykieta

0

Mam rozkaz:
sub label4, BX

gdzie
CS ma wartość: A100H
DS ma wartość: B200H

Wytłumaczy mi ktoś, jak uzyskać odpowiedzi na poniższe pytania mając tylko tyle informacji co powyżej? Google niestety nie pomaga...

  1. Jaki jest adres rozkazu wewnątrz segmentu kodu?
  2. Jaki jest adres operandu związanego z etykietą label4?, wewnątrz segmentu danych?
  3. Jaka jest wartość operandu w pamięci pod etykietą label4 przed wykonaniem rozkazu?
  4. Jaka jest wartość operandu w pamięci pod etykietą label4 po wykonaniu rozkazu?
1
  1. Na podstawie tego fragmentu kodu nie da się tego nijak stwierdzić, bo to zależy od pozycji tej instrukcji w kodzie. Gdyby to była pierwsza instrukcja w segmencie kodu to offset byłby 0 ;]
  2. Jw, nie da się tego stwierdzić bo nie wiemy jak wygląda segment danych. Jeśli ta etykieta jest na początku DS to offset wynosi 0
  3. Jw, skąd mamy wiedzieć jaka jest wartość skoro nie widzimy deklaracji tej etykiety?
  4. Wartość to będzie wartość początkowa minus wartość rejestru BX.

Twoje pytanie jest mniej więcej tak głupie jak: Cześć, mam takie równanie "y = x+1" i musze odpowiedzieć na pytanie "ile wynosi X" oraz "ile wynosi Y", google nie pomaga :(

0
Shalom napisał(a):
  1. Na podstawie tego fragmentu kodu nie da się tego nijak stwierdzić, bo to zależy od pozycji tej instrukcji w kodzie. Gdyby to była pierwsza instrukcja w segmencie kodu to offset byłby 0 ;]

Dysponuje tylko taką treścią zadania więc można założyć, że to pierwsza instrukcja...
Ten podpunkt próbowałem wyjaśnić w ten sposób, że skoro rejestr CS przechowuje adres wykonywanej instrukcji to wartość A100H będzie adresem naszego rozkazu.

1

skoro rejestr CS przechowuje adres wykonywanej instrukcji

A skąd taki pomysł? Rejestr CS przechowuje adres segmentu kodu, ale to rejestr IP przechowuje adres wykonywanej instrukcji (w ramach segmentu kodu). Zresztą w zadaniu jasno napisane że wewnątrz segmentu kodu, wiec chodzi o sam offset wewnątrz CS

Dysponuje tylko taką treścią zadania więc można założyć, że to pierwsza instrukcja...

To bardzo mało prawdopodobne.

0

to może to będzie pomocne?
to może to będzie pomocne?
jak czytać taki diagram kolego?

0

Wrzuć jeszcze mniej czytelny obrazek to na pewno będzie pomocny.
Jakby było czytelne to byłoby pomocne bo widzisz tam przecież wartości na szynie adresowej i widzisz gdzie są odczyty i zapisy.

0
Shalom napisał(a):

Wrzuć jeszcze mniej czytelny obrazek to na pewno będzie pomocny.
Jakby było czytelne to byłoby pomocne bo widzisz tam przecież wartości na szynie adresowej i widzisz gdzie są odczyty i zapisy.

wybacz ale nie mam skanu w lepszej jakości...

co do diagramu to w sytuacji kiedy ALE jest w stanie wysokim to na poziomie AD15 - AD0 mamy odpowiednio kolejne adresy?
czyli:
1 stan wysoki ALE oznacza, że powyżej jest adres kodu operacji wraz z bajtem adresowym
2 stan wysoki ALE oznacza, że powyżej jest adres I operandu
3 stan wysoki ALE oznacza, że powyżej jest adres II operandu
4 stan ALE oznacza, że powyżej jest adres wyniku

Dobrze rozumiem?

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