🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2304

Re: Tablica

#2304
From: przemo12146
Date: Sat, 24 Jul 2010 16:40
138 lines
7250 bytes
> Użytkownik "Remek" napisał:

> Przerobiłeś już choć jedno?
> Ciekaw tylko jeszcze jestem jakiej "starej" wersji asemblera użyjesz do tych ćwiczeń.

Tak, przerobiłem już kilka.
Co do wersji używam "MASM32 Version 10" ściągnięty z tej strony:
http://www.masm32.com/masmdl.htm

a jeśli chodzi o kod programu z książki pt.:"Zrozumieć Asembler" np.:
EAT to miałem początkowo problem z skompilowaniem programu ale
wystarczyło ten kod :

> ;-------------------------------------------------------------------------------------;
> ;					EAT.ASM
> ;				Podręczny program informacyjny
> ;
> ;							Autor: Jeff Duntemann
> ;							MASM/TASM
> ;							Ostatnia aktualizacja 2/5/92
> ;-------------------------------------------------------------------------------------;
> ;------------------------------------------|
> ;Początek Segmentu Stosu   |
> ;------------------------------------------|
> MyStack SEGMENT STACK       ; słowo STACK powoduje załadowanie SS przez DOS
> 	DB 64 DUP ('STACK!!!')    ;linia ta rezerwuje 512 bajtów na stos
> MyStack ENDS
> ;------------------------------------------|
> ;Koniec Segmentu Stosu	    |
> ;------------------------------------------|
>
> ;------------------------------------------|
> ;Początek Segmentu Danych|
> ;------------------------------------------|
> MyData SEGMENT
> Eat1	DB "Eat at Joe's...",'$'
> CRLF	DB 0DH,0AH,'$'
> MyData ENDS
> ;------------------------------------------|
> ;Koniec Segmentu Danych	 |
> ;------------------------------------------|
>
> ;------------------------------------------|
> ;Początek Segmentu Kodu    |
> ;------------------------------------------|
> MyProg SEGMENT
>        assume CS:MyProg,DS:MyData
> Main   PROC
> Start:			;tu zaczyna się program
>      mov AX,MyData	;Zapamiętanie w DS adresu własnego segmentu danych
>      mov DS,AX	              ;Ale do DS nie można ładować wartości natychmiastowej
>      lea DX,Eat1	              ;załadowanie przesunięcia tekstu Eat1 do DX
>      mov AH,09H	              ;wybranie usługi DOS 09H: wypisz ciąg znaków
>      int 21H		;wywołanie usługi DOS
>
>      lea DX,CRLF	              ;załadowanie przesunięcia ciągu CRLF do DX
>      mov AH,09H	              ;wybranie usługi DOS 09H: wypisz ciąg znaków
>      int 21H		;wywołanie usługi DOS
>
>      mov AL,4CH	              ;wybór procedury DOS kończącej program
>      mov AH,0		;przekazanie wartości do zmiennej ERRORLEVEL
>      int 21H		;przekazanie sterowania z powrotem do DOS
>
> Main ENDP
>
> MyProg ENDS
> ;------------------------------------------|
> ;Koniec Segmentu Kodu	    |
> ;------------------------------------------|
>
> END Start

zmodyfikować na :

> ;-------------------------------------------------------------------------------------;
> ;					EAT.ASM
> ;				Podręczny program informacyjny
> ;
> ;							Autor: Jeff Duntemann
> ;							MASM/TASM
> ;							Ostatnia aktualizacja 2/5/92
> ;-------------------------------------------------------------------------------------;
> ;------------------------------------------|
> ;Początek Segmentu Stosu   |
> ;------------------------------------------|
> MyStack SEGMENT STACK       ; słowo STACK powoduje załadowanie SS przez DOS
> 	DB 64 DUP ('STACK!!!')    ;linia ta rezerwuje 512 bajtów na stos
> MyStack ENDS
> ;------------------------------------------|
> ;Koniec Segmentu Stosu	    |
> ;------------------------------------------|
>
> ;------------------------------------------|
> ;Początek Segmentu Danych|
> ;------------------------------------------|
> MyData SEGMENT
> Eat1	DB "Eat at Joe's...",'$'
> CRLF	DB 0DH,0AH,'$'
> MyData ENDS
> ;------------------------------------------|
> ;Koniec Segmentu Danych	 |
> ;------------------------------------------|
>
> ;------------------------------------------|
> ;Początek Segmentu Kodu    |
> ;------------------------------------------|
> MyProg SEGMENT
>        assume CS:MyProg,DS:MyData
> ;Main   PROC                   ;jeśli zostawiamy etykietę Start to Main PROC i Main ENDP zaznaczamy jako komentarz
> Start:			;tu zaczyna się program   ;; możemy też odznaczyć komentarze przy Main PROC i Main
>                                        ; ENDP i zaznaczyć przy Start i END Start
>      mov AX,MyData	;Zapamiętanie w DS adresu własnego segmentu danych
>      mov DS,AX	              ;Ale do DS nie można ładować wartości natychmiastowej
>      lea DX,Eat1	              ;załadowanie przesunięcia tekstu Eat1 do DX
>      mov AH,09H	              ;wybranie usługi DOS 09H: wypisz ciąg znaków
>      int 21H		;wywołanie usługi DOS
>
>      lea DX,CRLF	              ;załadowanie przesunięcia ciągu CRLF do DX
>      mov AH,09H	              ;wybranie usługi DOS 09H: wypisz ciąg znaków
>      int 21H		;wywołanie usługi DOS
>
>      mov AX,4C00H	 ;wybór procedury DOS kończącej program  ;;  tu zmieniamy na AL na AX i 4C00h
>      mov AH,0		;przekazanie wartości do zmiennej ERRORLEVEL
>      int 16H		;przekazanie sterowania z powrotem do DOS ;; a Int 21h na 16h
>
> ;Main ENDP
>
> MyProg ENDS
> ;------------------------------------------|
> ;Koniec Segmentu Kodu	    |
> ;------------------------------------------|
>
> END Start

kompilujemy to za pomocą "ml.exe" z biblioteką "mspdb50.dll" i
"ml.err" i tak wygenerowany plik obj poddajemy obróbce przez "link16",
zmiany w kodzie są zależne od wersji DOS'a (tak mi się wydaje). Oprócz
tego zamiast bawić się masm'em mogę użyć fasm'a.
Technical Details
Message-ID: <16de92be-bdfb-4468-84d9-28f3cc6439e4@e5g2000yqn.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed1.plix.pl!goblin1!goblin.stu.neva.ru!postnews.google.com!e5g2000yqn.googlegroups.com!not-for-mail
References: hvlmqm$ljb$1@mx1.internetia.pl <acaaee6e-5908-471b-a309-b7146d718425@b35g2000yqi.googlegroups.com> <i17lng$7gb$1@inews.gazeta.pl> <337ec0e6-4d8b-4496-a792-4503ce94e063@k39g2000yqb.googlegroups.com> <i19ceh$ahu$1@inews.gazeta.pl> <92331df0-601e-4a00-bf14-d0874270720c@z8g2000yqz.googlegroups.com> <i1ql6t$375$1@inews.gazeta.pl> <b8539f6f-01d2-4776-a032-c06d7081be8e@d8g2000yqf.googlegroups.com> <i1t4jv$jf7$1@inews.gazeta.pl> <i26vov$a5a$2@inews.gazeta.pl> <8451d5c3-2f94-47ad-a489-0bc165b16e99@q35g2000yqn.googlegroups.com> <i2arob$jom$1@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed1.plix.pl!goblin1!goblin.stu.neva.ru!postnews.google.com!e5g2000yqn.googlegroups.com!not-for-mail
From: przemo12146 <przemo12146@gmail.com>
Newsgroups: pl.comp.lang.asm
Subject: Re: Tablica
Date: Sat, 24 Jul 2010 09:40:45 -0700 (PDT)
Organization: http://groups.google.com
Lines: 163
Message-ID: <16de92be-bdfb-4468-84d9-28f3cc6439e4@e5g2000yqn.googlegroups.com>
References: hvlmqm$ljb$1@mx1.internetia.pl <acaaee6e-5908-471b-a309-b7146d718425@b35g2000yqi.googlegroups.com>  <i17lng$7gb$1@inews.gazeta.pl> <337ec0e6-4d8b-4496-a792-4503ce94e063@k39g2000yqb.googlegroups.com>  <i19ceh$ahu$1@inews.gazeta.pl> <92331df0-601e-4a00-bf14-d0874270720c@z8g2000yqz.googlegroups.com>  <i1ql6t$375$1@inews.gazeta.pl> <b8539f6f-01d2-4776-a032-c06d7081be8e@d8g2000yqf.googlegroups.com>  <i1t4jv$jf7$1@inews.gazeta.pl> <i26vov$a5a$2@inews.gazeta.pl>  <8451d5c3-2f94-47ad-a489-0bc165b16e99@q35g2000yqn.googlegroups.com>  <i2arob$jom$1@inews.gazeta.pl>
NNTP-Posting-Host: 195.117.93.1
Mime-Version: 1.0
X-Trace: posting.google.com 1279989645 11109 127.0.0.1 (24 Jul 2010 16:40:45 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Sat, 24 Jul 2010 16:40:45 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: e5g2000yqn.googlegroups.com; posting-host=195.117.93.1;  posting-account=vJlzHgoAAAB4VQEIaOfBd-KwI2yffTmo
User-Agent: G2/1.0
X-HTTP-UserAgent: Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.6.30  Version/10.60,gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit