Assembler - trochę teorii


(Cornel E) #1

Witam! Mam kilka pytań co do assemblera:

  1. W jaki sposób utworzyć adres fizyczny korzystając z zapisu logicznego adresu (segment:offset)?

  2. Jaka jest zasada działania przerwania INT 21H z atrybutem AX=4C00H?

  3. Czym różni się plik typu .exe od pliku typu .com?

  4. Do czego służy przerwanie 0Ch?

  5. Czym różni się procedura od makra?

Proszę o pomoc, to jest dla mnie katorga :slight_smile:


(Ryan) #2

1.

Chyba mylisz pojęcia. O przestrzeni logicznej można mówić w przypadku stronicowania lub segmentacji. segment:offset jest reprezentacją adresu fizycznego w trybie rzeczywistym pracy procesora.

2.

Operacja 4C kończy działanie programu z kodem błędu (ERRORLEVEL) ustawionym w al (w Twoim przykładzie: 0). Nie bardzo rozumiem pytanie: jak to jaka jest zasada działania? Program usuwany jest z pamięci.

3.

Plik EXE może mieć wiele segmentów (do 64kB każdy) kodu, danych lub stosu. Plik EXE może korzystać z dobrodziejstw ekstenderów (PMODE/W, Dos4GW - generalnie może pracować w trybie chronionym procesora). Plik EXE zaczyna się od preambuły z unikalnym dwuznakiem MZ na początku (od nazwiska Mark Zbikowski - architekta MS). COM ugraniczony jest do jednego segmentu.

4.

Do obsługi portu COM1.

5.

Makro to fragment kodu, który kompilator "wkleja" w miejsce, w którym makro zostało użyte. Procedura to fragment kodu do którego się "skacze" i który przeważnie chroni rejestry przed nadpisaniem (pusha/popa lub w jakiś bardziej wysublimowany sposób).


(Cornel E) #3

Ok. Dzięki za pomoc :mrgreen:

Złączono Posta : 19.09.2007 (Sro) 11:05

Witam!

Znowu mam kilka pytań:

1: Czym przerwanie sprzętowe różni się od programowego?

2: CO to jest segment?

3: Do czego służą rejestry CS, SS, DS, ES, FS i GS w trybie rzeczywistym i chronionym?

4: Które procesory firmy Intel mogą korzystać ze wszystkich wymienionych w poprzednim pytaniu 7 rejestrów, a które nie mają tych rejestrów?