[asm16/TASM] Proste programy

0

Witam:)
Korzystam z kompiatora TASM, mam problem z kompilacją do plików *.com. Próbowałem zlinkować je za pomocą tlink nazwa /t . A oto 2 programy które próbowałem skompilować do postaci *.com

MODEL TINY
org 100h
.DATA
Tekst DB "Ala ma kota $"
.CODE
Zaczynamy:
mov ax,@Data
mov ds,ax
mov dx,offset Tekst
mov ah,09h
int 21h
mov ax,4c00h
int 21h
.stack 100h

end
Zaczynamy

Drugi :

ASSUME ds:Dane,cs:Kod,ss:Stosik

Dane SEGMENT
Tekst DB "Witam w programie$"



Dane ENDS
Stosik SEGMENT STACK 'stack'
db 64 dup('stack')
Stosik ENDS

Kod SEGMENT

ASSUME ds:Dane,cs:Kod,ss:Stosik

Start:
mov ax,Dane
mov ds,ax
mov dx,offset Tekst
mov ah,09h
int 21h
mov ax,4c00h
int 21h

Kod ENDS 



End 
Start


A żeby nie zaczynać nowego tematy to zapytam w tym, bo szukałem w różnych miejscach, ale odpowiedzi nie znalazłem co dokladnie robie dup(?) ?? Czy szablon tworzenia za pomocą segmentów można mieszać ze sposobem krótszym z kropką (np. .code) ??
Z góry dziei za pomoc :)

0

Nie możesz wygenerować pliku com/bin ponieważ w kodzie takim nie można bawić się segmentami. Wszystkie typy segmentów powinny obejmować ten sam obszar. Najlepiej rejestry segmentowe wypełnić kopią z CS, tak aby nie wpływały w żaden sposób na generowanie adresów w pozostałych rejestrach.
Jedynym wymaganiem dla pliku com jest przesunięcie początku właściwego kodu o 256 bajtów, czyli instrukcja programu asemblera org 100h. Można objąć cały kod i dane instrukcją segmentu: np. "kod segment" (zakończony przez "kod ends") oraz użyć instrukcji assume cs:kod, ds:kod. Do tego samego sprowadza się wybranie modelu Tiny, który umieszcza wszelki kod i dane w jednym segmencie.

Natomiast instrukcja dup powoduje wypełnienie przez program asemblera całego przydzielonego obszaru duplikatami podanej wartości. W tym wypadku będą to 64 bajty wypełnione słowami "stack" (ile się zmieści). Ułatwia to podejrzenie całego kodu edytorem szesnastkowym i w pewnym stopniu odpluskwianie.

Pisząc w assemblerze ważne jest, żeby rozróżniać instrukcje maszynowe (mnemonniki) od instrukcji asemblera (pseudoinstrukcje ułatwiające życie), a jedne i drugie od makroinstrukcji. Można napisać w assemblerze kod kompletnie nie korzystający z instrukcji programu asemblera. Można olać nawet instrukcję org, tyle że w każdej przerwie kodu trzeba będzie wklepać mnóstwo instrukcji NOP (i policzyć je na piechotę).

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