[tasm] vysvetlenie zakladnych prikazov – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

[tasm] vysvetlenie zakladnych prikazov – Assembler – Fórum – Programujte.com[tasm] vysvetlenie zakladnych prikazov – Assembler – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Guiseppe
~ Anonymní uživatel
2 příspěvky
20. 10. 2011   #1
-
0
-

zdravim, prosim vysvetlite mi trochu obsirnejsie co robia niektore prikazy(upozornujem na ne v komentaroch). pripadne mi odporucte nejaku literaturu, kde su vysvetlene zaklady, lebo nejak to nedavam.

.MODEL small

.STACK                         

.DATA

  Message DB 'Hello world!',0   

.CODE
  
  Prog:
  
     mov ax,@data               ;viem ze tieto dva prikazy ulozia bazovu adresu do a a ds
     mov ds,ax                  ;mohol by mi niekto vysvetlit naco je to dobre?
     mov bx, offset Message     
     mov di,0                   ;v ucebnych komentaroch mam napisane "prvy znak ma index 0"  
				; nie je to nahodou len priradenie nuly registru di?
  WriteChar:

     mov dl,[bx+di]             
     cmp dl,0                   
     jz WriteEnd                
     mov ah,2
     int 21h    		;sluzba ah,2 vypise znak, naco tam ale musi byt
				; int21h?                
     inc di                     
     jmp WriteChar              

  WriteEnd:

     mov ax,4C00h               

END Prog
Nahlásit jako SPAM
IP: 194.160.135.–
Reklama
Reklama
KIIV+42
God of flame
20. 10. 2011   #2
-
+1
-
Zajímavé

no tezko se bude vysvetlovat jednotlive operace assembleru, kdyz nechapes co vlastne procesor dela... (obzvlaste ty preruseni)

zacnu tim WriteChar:

bx+di je pouzito jako pointer na data... (to mas nastavene pred tim)

takze: mov dl,[bx+di]  - zkopirujes jeden byte z adresa bx+di

cmp dl,0  - zkontrolujes, zna nema hodnotu 0 (ukoncovaci znak)

pokud mas 0 musis skoncit s vypisem:  tj skocis pomoci jz na WriteEnd a hodis nejaky response kod

jinak nahrajes do AH 2 a vyvolas preruseni - preruseni si budes muset procist - priblizne o to, ze mas nekde v pameti vektory preruseni kam se podle zavolaneho preruseni "odskoci" - napriklad zde k biosove obsluze vypsani znaku

pak uz se jen posunes o znak dal a vypisujes dokud nenarazis na 0

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vega330
Duch
21. 10. 2011   #3
-
0
-

#1 Guiseppe
Suhlasim s KIIV. Najskor si musis nastudovat ako procesor pracuje, ako sa pristupuje k datam.Co to znamena baza...atd. Co sa tyka toho mov   AH,2     v podstate si si odpovedal sam....je to kod sluzby ktora sa ma vykonat v preruseni int  21h.  Toto prerusenie ma rozne sluzbi a jednotlive udaje k nim su odovzdavane v registroch. V tomto pripade je vypisovany znak odovzdavany v dl registry a sluzba je v AH registry. Kazde prerusenie ma svoju dokumenaciu a tam je presne popisane co a v akom formate sa odovzdava.  

Nahlásit jako SPAM
IP: 195.168.55.–
Mircosoft+1
Věrný člen
26. 10. 2011   #4
-
0
-

Asi nejdůležitější je vědět, co je cílem toho programu: vypsat na obrazovku "Hello world!".

Pro vlastní psaní se používá asi nejjednodušší možný způsob: výpis znak po znaku pomocí služeb DOSu (tj. přerušení 21h). Služba s kódem AH=2 znamená "vypiš na obrazovku znak, který je uložený v DL". A účel celého zbytku programu je, aby postupně do DL dával jednotlivé znaky k vypsání, volal na ně int 21h, a když je vypsaná celá zpráva, skončil. Konec zprávy je v tomhle případě označen nulovým bytem (to je ta nula za tím Hello world na řádku Message), obecně by šel použít i jiný způsob.

Ten komentář "prvy znak ma index 0" je v podstatě správně. První znak zprávy ("H") je přesně na adrese určené návěštím Message, takže k ní nic nepřičítáš, čili Message+0. "e" je na Message+1, "l" na Message+2 atd. Adresování funguje tak, že k bázovému ofsetu (v tomto případě BX) přičítáš index (tady DI). To ale neděláš ty, ale procesor. Plus ještě je tam implicitní segmentová část adresy uložená v DS, do které sis na začátku programu uložil segment datové části programu (.DATA). Segmentové registry jsou dva, DS a ES. DS je implicitní a v adresách se obvykle nepíše, ES se psát musí (mov AX,[ES:DI] apod.). Ale to už je o architektuře procesoru, kterou se budeš muset tak jako tak naučit.

Seznam a podrobný popis služeb int 21h je česky třeba v AThelpu. Učebnici přímo na TASM nemám, ale vím o jedné na vkládaný Assembler, což je v jádru totéž a adresování tam funguje úplně stejně. Obojí najdeš tady: http://mircosoft.mzf.cz/navody.htm

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 119 hostů

Podobná vlákna

TASM — založil bbeni

TASM problem — založil dEVIANT

Ide TASM — založil bbeni

Rozdiel prikazov — založil novy

[tasm] kde sa ho naucit? — založil Guiseppe

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý