Překlad na P4 – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Překlad na P4 – Assembler – Fórum – Programujte.comPřeklad na P4 – Assembler – Fórum – Programujte.com

 

16bit0
Newbie
13. 2. 2009   #1
-
0
-

mám jednu otázku ohledně TASM,TLINK. Zkouším s tímto překladačem kompilovat .com programy na mém notebooku Pentium 4.

můžu si třeba vymyslet tento jednoduchý příklad:

A SEGMENT
ASSUME CS:A,DS:A
ORG 100H

.8086

start:
lea dx,text
mov ax,offset text1
mov ah,09h
int 21h
int 20h


text db 'ahoj'
text1 db 'assembler'

a ends
end start

tzn. hodnoty proměných mám v dx a ax, potom se vyvolá výpis na obrazovku a program skončí. Po spuštění by se mi tedy mělo zobrazit "ahoj assembler" a konec. Jenomže mě se za tímto zobrazí ještě dalších cca. 100-200 různých ASCII znaků, co tam nemají co dělat. Může to mít nějakou souvislost s tím, že jedu na Pentiu 4 apod.?

díky

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
TooM
~ Anonymní uživatel
5 příspěvků
13. 2. 2009   #2
-
0
-

nemel by ten retezec byt ukoncen ukoncovaci nulou nebo tak nejak? :)

Nahlásit jako SPAM
IP: 85.135.97.–
o-lox0
Super člen
13. 2. 2009   #3
-
0
-

Řetězec musí být ukončen znakem '$' pro službu 09h DOSu !

S Pentiem 4 neni určitě problém.

a vymaž si to : mov ax,offset text1 ; to poustis do luftu jakousi jalovost

Nahlásit jako SPAM
IP: 85.71.152.–
16bit0
Newbie
13. 2. 2009   #4
-
0
-

TooM napsal:
nemel by ten retezec byt ukoncen ukoncovaci nulou nebo tak nejak? :)



JJ, ukončuje se znakem $. Pak už je vše vpohodě. Když tam ten znak nedám vypíše se zdřejmě úplně všechno co ten registr obsahuje...

díky za inspiraci

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
16bit0
Newbie
13. 2. 2009   #5
-
0
-

o-lox napsal:
Řetězec musí být ukončen znakem '$' pro službu 09h DOSu !

S Pentiem 4 neni určitě problém.

a vymaž si to : mov ax,offset text1 ; to poustis do luftu jakousi jalovost



díky, o tom $ už vím, dopsali jsme příspěvky téměř nastejno. Co je špatného na mov ax, offset text1 ? je to to samé jako lea ax,text1. Nebo myslíš, že mám použít raději registr dx?

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
o-lox0
Super člen
13. 2. 2009   #6
-
0
-

Špatné to není, je to jen zbytečné.
Služba 09h očekává řetězec definovaný počátkem v DX. Ty jí ho taky nahoře dáš, ale Musíš přece vidět, že AXko je hned na dalšim řádku přepsáno 9, tudíž tento registr AX ti definuje volanou službu DOSu.
Jsme doma?

Nahlásit jako SPAM
IP: 85.71.152.–
16bit0
Newbie
13. 2. 2009   #7
-
0
-

To o-lox :

rozhodně to AXko je kravina, ale pokud bych chtěl vypsat takhle dva řetězce za sebou pomocí DXka, tak to taky nejde.

např:

...
lea dl, text
lea dh,text1
mov ah,09h
mov 20h
...

no assembler jsem viděl tak dvakrát v životě, tak sry jestli otravuju z blbejma dotazama....

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
o-lox0
Super člen
13. 2. 2009   #8
-
0
-

Věř že Tyto řetězce jsou za sebou v paměti.

pam1 DB '11111'
pam2 DB '22222'


vytvori nekde v pameti blok 1111122222 , na to se muzes spolehnout. ( pokud teda nepouzivas konstrukce na zarovnani s align atd. )

do DX naláduješ offset pam1 a třeba ta 9ka jede od toho offsetu (a prvni 1ky) porad dal az po znak $.

Nahlásit jako SPAM
IP: 85.71.152.–
16bit0
Newbie
13. 2. 2009   #9
-
0
-

To o-lox :

tomu rozumím. Jenomže teď jsem to zkusil(použít pro proměnné Dl,Dh) a program se mi vůbec nepřeložil. To jsem teda zrovna nečekal. Chápu, že třeba Ah se požívá pro fce DOSu, ale Dl a Dh by snad mohli fungovat...

...
lea dl, text1
lea dh,text2
mov ah,09h
int 21h
int 20h

text db 'a'
text db 'b$'
...

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
o-lox0
Super člen
13. 2. 2009   #10
-
0
-

ehm, někdo mne neposlouchal !!!!!!!!!!
lea dx,text
mov ah,9
int 21h
exitcode

A za další když chci _reálné_ 2 texty, je to jako s chůzí jsem nucen udělat dva kroky. => 2x int21

EDIT> chyba prekladu je ze tam mas 2 promenne jednoho jmena text!
text db 'a'
db 'b$' ; takto

Nahlásit jako SPAM
IP: 85.71.152.–
16bit0
Newbie
13. 2. 2009   #11
-
0
-

To o-lox :

ty proměnné byly samo text1 a text2........jinak díky, už mi to celkem chodí....

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
16bit0
Newbie
13. 2. 2009   #12
-
0
-

To 16bit :

No a pokračuju o kousek dál...

Jednoduchý program, který při stisku stejné klávesy vypíše rovno a při stisku dvou různých kláves nerovno.

A SEGMENT
ASSUME CS:A,DS:A
ORG 100H

.286

start:

mov ah,00h
int 16h
mov dh,al
int 21h

mov ah,00h
int 16h
mov dl,al
int 21h

cmp dh,dl
jne text2
je text

text:
lea dx,equal
mov ah,09h
int 21h
jmp konec

text2:
lea dx,nequal
mov ah,09h
int 21h

konec:
int 20h

key db 0
key2 db 0
equal db 'rovno$'
nequal db 'nerovno$'


a ends
end start


....no jo , jenomže stisknu třeba w,w program se vykoná vpořádku nebo w,e taktéž, s,s je OK, ALE a,s už není ok, program se začne chovat nestandartně(vypisuje nesmysly). Nebo když první písmeno stisknu f okamžitě vypíše : kontrolní blok souboru (fcb) není k dispozici. To mi přijde docela zajímavé...

edit: proč není možno porovat přímo proměnné(např. cmp key,key2) ?

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
o-lox0
Super člen
13. 2. 2009   #13
-
0
-

edit: proč není možno porovat přímo proměnné(např. cmp key,key2) ?


nádherný dotaz- v dávných dobách by jistě Amigisty docela potěšil :-D (nejde jsme pod Intelem a ten preferuje registrovou manipulaci oproti paměťové, prostě je tak stavěno CPU)

mov ah,00h
int 16h
mov dh,al
int 21h ; ???

Tento blok mi v něm zkus obhájit to Int 21h (je to chyba), ale co si od toho čekal? - možná tu zajímavost výsledků :D

Nahlásit jako SPAM
IP: 85.71.152.–
16bit0
Newbie
13. 2. 2009   #14
-
0
-

To o-lox :

RE1:
díky, je to jasné...

-----
Int 21h je tam podle mě nutný, protože jinak se v případě stisku stejných kláves místo rovno napíše rovnorovno. Jinak samozdřejmě funguje program i bez toho přerušení, bohužel pořád se stejnými chybami. ...

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
o-lox0
Super člen
13. 2. 2009   #15
-
0
-

Programátore to jste neodpověděl korektně.

Int 16h ; = ceka na stisk klavesy, blokace programu
mov "cosi"
int 21h ; je volani DOSu nema tam co delat, ponevadz co tam volas, jakou sluzbu??, tim padem zpusobuje errors

To ze je tam porad chyba, je ze sis mozna nevsiml ze se jedna o 2 bloky (ja poukazal na 1).

Mam TASM a TLINK naloadoval jsem si tve zadani a funguje mi, zadny zazrak odstranil jsem jen double a ne single.

Nahlásit jako SPAM
IP: 85.71.152.–
16bit0
Newbie
13. 2. 2009   #16
-
0
-

To o-lox :
:-)))
jj, už mi to jde. Problém je v tom, že vidím asm podruhé vživotě a připadá mi celkem zajímavý. Narovinu ještě ani pořádně nevím co int 21h dělá,

a proč zde být má:

text2:
lea dx,nequal
mov ah,09h
int 21h


a zde zase ne:

start:

mov ah,00h
int 16h
mov dh,al


i když možná už vím, 09h je funkce dosu, a proto musí být voláno přerušení int 21h. Kdežto 00h souvisí s přerušením int 16h klávesnice.

PS: jenom taková otázečka, jde v assembleru přejít ještě na nižší(nejnižší) úroveň jako třeba v Delphi jakožto vyšším prog. jazyku jde vepsat i blok ve strojových instrukcích. Tzn. co je to vlastně mov, lea nebo mov dx,ax apod. ve dvojkové soustavě? :-)) to už pak musí být docela na bednu, ale v počátcích počítačů, před assemblerem se tak programovalo...


Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
o-lox0
Super člen
14. 2. 2009   #17
-
0
-

/si Int jakejkoliv představ jako zmáčknutí funkční klávesy, třeba F1 - někde mi náhle vyvolá help, F2 - Save věci, F3 - ...

/Inline vlozeny kod
Trik je tady v tom zápisu proměnných - paměťových bloků
třeba tu instrukci Int 21h si pro zkoušku nahraď naostro zápisem DW 21CDh, vloženim mezi ostat. instrukce. A nic se ti nezmění. Usetril si praci nastroji tasm a vytvoril rovnou cpu strojak.

Můžeš se na ně pak podívat, děláš do .COMu a neni nic jednoduššího než si své dílo Notepadovat hexa editorem.

Nahlásit jako SPAM
IP: 85.71.152.–
16bit0
Newbie
15. 2. 2009   #18
-
0
-

To o-lox:

čau, sry, musel jsem se trochu odmlčet....

Projel jsem si to hex-editorem, vypadá to celkem jasně. DW 21CDh jsem si ještě ze srandy poupravil na DW 10000111001101b. No a už jsme skoro doma... jo jenomže co to znamená to DW a označení soustavy, to b? Já vim, že teď už asi zacházim trochu do extrému, ale prostě mě to tak nějak zajímá a když to budu vědět napíšu to přerušení komplet binárně a překladač mě za to bude milovat, protože s tím nebude mít vůbec žádnou práci :-)))

Jo a mimochodem, nemel bys nejakej přehlednej seznam pro další instrukce, přerušení, fce atd....? Int 21h = DW 21CDh to už vím, ale co další???

díky

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
o-lox0
Super člen
15. 2. 2009   #19
-
0
-

Cely binarne 8-0 ?
Nech si vygenerovat LST soubor parametrem v tasm /l
máš to lepší než se pokoušet sám rozepisovat MOV AX,[dx] neboť je to dosti překomplikované
(i pro nezačátečníka)
Jinak bys to našel někde na stránkách Intelu, můžu i zaslat manual/texťák (600KB nezabaleně).

DW Data Word - velikost pameti (tj.2B)
DB Data Byte
pak DD Data Doubleword atd.
DQ,..
když nedáš b tak je soustava decimal.

Ale malinko to akceleruj!!!!, nahod nejakej dalsi slozitejsi priklad, celkem dosti co se da nakonec zakodovat bravurne do assembleru, ovladace, graficky efekty, rezidentni setric, diskove tools cache pocinaje, debugger, viry. jedem.. ;-]

Nahlásit jako SPAM
IP: 85.71.152.–
16bit0
Newbie
15. 2. 2009   #20
-
0
-

To o-lox :

díky, pokud se ti bude chtít pošli to na mail co mám v profilu.

určitě udělám nějakej další prográmek, ale taky mám ještě spoustu jiný práce, takže to bude asi chvilku trvat, než bude čas..ale rozhodně nehodlám tohle vlákno umrtvit!


Jo a taky se musim naučit nějaký další instrukce apod. a něco ještě počíst někde na netu, abych věděl co a jak dál...protože knížky o tom doma žádný nemám.

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
16bit0
Newbie
19. 2. 2009   #21
-
0
-

To 16bit :

Dneska jsem se konečně zase na chvilku dostal k ASM.

něco malinko jsem si přečetl o portech(instrukce IN,OUT). Jenomže problém je v tom, že tohle zrovna pod Win XP nefunguje, nešlo by to nějak obejít???

tady je takovej krátkej prográmek(ty výstupy by měli rozblikat ledky na klávesnici(opsal jsem to z návodu na netu :-) ).
Chtěl jsem ale odzkoušet ještě opakování , tzn. blok kódu se zopakuje podle hodnoty v BX. To jede v pohodě, až na to, že pokud chci pokaždé tu hodnotu vypsat na obrazovku, tak se program zblázní a začne vypisovat kraviny...

A SEGMENT
ASSUME CS:A,DS:A
ORG 100H

.286

start:

level1:
mov al, 0edh
out 60h,al
mov al,7h
out 60h,al
mov bx,65535
add cx,1
cmp cx,bx
je konec


mov dx,cx
mov ah,09h
int 21h


jmp level1


konec:
int 20h


a ends
end start


Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
o-lox0
Super člen
19. 2. 2009   #22
-
0
-

On assembler neni tak předpřipravenej na výpis čísel a dalších tvarovanejch těstovin.
Můžeš si udělat makro nebo nějakou funkci, kterou jen includem vlepíš.

něco jako:
(ať se naučíme pracovat se zásobníkem)
mov bl,0
mov ax,cx
@1:
xor dx,dx
div [ds:deset] ; definovat jako Word
push dx
inc bl
cmp ax,0
jne @1

@2:
pop dx
mov ah,2 ; vypis znaku
add dl,30h
int 21h ; prevedli jsme na cislo - rucne
dec bl
cmp bl,0
jne @2 ; tohle je ale lepsi zrovna delat pres string jelikoz tam muzes rovnou odradkovat -13,10 (zamysli se nad tim..)

Zas to nepřeháněj s těma registrama, na jedný straně paměť a na druhý číslo je povoleno.

Windows XP za tou klávesnicí takřka jistě nestojí, já jedu doma pořád na DOSu 6.22 a taky jsem
ostrouhal, to bude ten novej nekompatibilní hardware a buhví co za překopaný sběrnice. (nehledě na to že do kláves se zapisovalo přes 61h, nebo 64h)
Budeš mít lepší se naučit než s LEDkama klávesnice pracovat přímo s obrazovkou mrkni na INT10h
nebo ještě lépe si můžeme dát Lekce s velkym L a to přímý (bleskový) zápis do grafický paměti.
Pixely a tak.--. jedem..

Edit/napadlo me kdyz spustis VirtualPC a das PS/2 klavesnici a ne Usb melo by to pres 64h jit.

Nahlásit jako SPAM
IP: 85.71.152.–
16bit0
Newbie
20. 2. 2009   #23
-
0
-

To o-lox :

No tak sem kouknul na int 10h v SH helpu. musim říct, že mě to osvětlilo pár věcí a něco sem se zase naučil....Jo když si vzpomenu na nějakou jednoduchou starou 286tkovou hru, kde byla udělaná taková ta kostičková grafika a všichni se tomu smáli, to by asi bylo docela maso stvořit pomocí int 10h. Já myslim, že na to budou ještě jiný vychytávky, který neznám.zatim...

Psal si něco o přímém zápisu do graf. paměti.tak to trochu nadhoď...

Zde je muj pokusnej prográmek(je to kokotina ,ale umožnila mi vidět jak pracuje int 10h):

A SEGMENT
ASSUME CS:A,DS:A
ORG 100H

.286

start:
mov al,13h
mov ah,00h
int 10h
mov bh,0
mov bl,5ah
mov ah,0bh
int 10h

mov dx,0
kresli:
mov bh,1
inc dx
mov cx,34
mov al,17h
mov ah,0ch
int 10h
cmp dx,cx
jne kresli


mov al,50h
mov bl,32h
mov ah,0eh
int 10h


lea dx,pre
mov ah,09h
int 21h
mov ah,00h
int 16h
mov dl,al
mov ah,00h
int 16h
mov dh,al
cmp dh,dl
je znova
jne dale

znova:
mov al,0fh
mov ah,00h
int 10h
lea dx,tes
mov ah,09h
int 21h
mov ah,00h
int 16h
mov dl,6fh
mov dh,al
cmp dl,dh
je jumpstart
jne znova

jumpstart:
jmp start

dale:
mov al,12h
mov ah,00h
int 10h
lea dx,tes1
mov ah,09h
int 21h
mov ah,00h
int 16h
mov dl,65h
mov dh,al
cmp dl,dh
je konec
jne dale


konec:

int 20h

pre db 'stiskni dve klavesy zasebou$'
tes db 'jsi chytrak?|||| stiskni :o: $'
tes1 db 'well and good bye|||| press :e:$'
a ends
end start


PS: klávesnici mám PS/2(ne DIN konektor),používám ještě jednoho desktop celera na 2,8 GHz....
PS2: píšeš, že jedeš na dosu 6.22. To já tu mám taky na 286tce(zrovna nepoužitelná bohužel), ale jinak výtečnej stroj na PROGRAMování v ASM . Na učení v ASM je ale na nic, pač bez multitaskingu jsou určitý věci fak zdlouhavý. Třebas přepnutí z SH helpu do editu apod...lepší je si vedle pustit noťas...bla.bla.konec

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
o-lox0
Super člen
21. 2. 2009   #24
-
0
-

Tak nejdřív ke klávesnici DIN5pin starý velký PC/AT compatible ma byt těch 64h(prip. 61h)
co si pamatuju behalo to, mozna ten 6pin malej barevnej je uz nekde jinde, tezko
si vysvetlit jinak proc to nic nedela, jeste je prikaz na zpetny echo 0EEh (ale lovim
z paměti) pro status. Pak cti z 60h a jestli nevrati 0EEh do AL neni to OK. Ono
vyrobce klavesnice to mohl zmenit,nevim.

DOSů mám několik multiboot, ještě před dvěma/třema lety jsem fungoval na 80386ce, a že to mělo speciální atmošku nechat naběhnout takový stroj a čekat a čekat. Nakonec jsem to nevydržel :D (a na c4s upgradeoval na 486/66MHz, oni mrchy Windows 98 chtějí 486 jinak nespustí instalaci!!) Jinak spíš víc používám FAT32ovej.

Pokročilá Grafika - díl 1. úvodní procitnutí do nižšššího světa
Vyčlenili bychom si na to segmentový registr ES.
Graficka pamet se mapuje do adresoveho prostoru 0A000:0000 až po 0AFFF:F
Jelikož to je 64KB a na rozlišení 1024*768*16 které budem používat a žere 1572864Bytes
nestaci budeme používat přepínané mapovane banky. Vezmeme si na paškál Vesu, nic jiného ani neni.
Taky je možnost skočit rovnou do Protected modu a vyhnout se prepinani bank, ale nechame si to na pozdeji.

Abychom se dostali do cviku zacneme poporadku TEXTOVYM rezimem, ten se mapuje na
B800:0 a dal a je very Easy. Kazdy byte predstavuje znak, pozdeji bude Slovo predstavovat
65536 barev pixelu tozn es:[0],'A' zobrazi A na xy=1/1.
Ovsem v textovem rezimu je dalsi byte na barvu popredi a pozadi tozn. es:[1],17h ; obarvi znak na bilo a pozadi myslim na modro (7bila1modra). Souradnice vzrustaji jednoduse po x do 80*2. es:[20+160*1] je 2 radek 10 sloupec.

Zapni mozkovnu
Tu>

MASM

model tiny
.486
random MACRO cislo
xor dx,dx
mov ax,[r]
add ax,13
mov bx,cislo
mul bx
div [del]
mov [r],dx
mov cx,ax
ENDM
clearscreen MACRO
mov ax,700h
mov cx,80*25
mov di,0
rep stosw
mov ah,2
mov bh,0
mov dx,0
int 10h
ENDM
videopamet MACRO
push ax
xor di,di
mov al,160
mul bh
add al,bl
add al,bl
mov di,ax
pop ax
stosw ; vhodna instrukce
ENDM
dataseg
text DB 'a co tohle - jak jsi na tom v reakcich ?$'
text1 DB 92,138,134,158,0,168,146,0,170,150,130,160,152,158,'$' ;a
text2 DB 96,158,136,152,138,0,154,138,0,148,166,146,0,160,130,136,0130,172,150,130,'$';r1
text3 DB 72,94,68,100,114,0,96,94,102,104,100,74,80,2,'$'
buffer DB 100 dup(0)
; toto je predpripraveny sifrovany system co si vysyslime k ver.2.0 na pozdeji
chyceno DB 0
uniklo DB 0
cas DW 0
r DW 1000
znak DB 0
del DW 953
org 100h
codeseg

startupcode

mov ax,0b800h
mov es,ax
xor ax,ax
mov fs,ax
mov ax,[fs:46ch]
mov [r],ax
@dalsi:
mov ah,1
int 16h
jz @10
mov ah,0
int 16h
@10:
clearscreen
mov ah,9
lea dx,text
int 21h
; bl bude x // bh bude y
random 8
add cx,18
test cx,1
jne @v1
mov [znak],'s'
jmp @v2
@v1:
mov [znak],'x'
@v2:
add cx,[fs:046ch]
@1:
mov ah,1
int 16h
jnz @dalsi
cmp cx,[fs:46ch]
jne @1
mov cx,[fs:46ch]
mov bl,6
mov bh,1
@pos:
mov ax,20h
videopamet
inc bh
mov al,[znak]
mov ah,7
videopamet
mov si,[fs:46ch]
inc si
@2:
cmp si,[fs:46ch]
jne @2
mov ax,100h
int 16h
cmp al,[znak]
je @ch
cmp bh,25
jne @pos
@ch:
mov ah,1
int 16h
jz @nic
mov ah,0
int 16h
@nic:
mov ax,20h
videopamet
cmp bh,9
ja @3
inc [chyceno]
cmp [chyceno],3
jne @dalsi
cmp [uniklo],0
je @4
clearscreen
call rozkoduj c,offset text2
exitcode
@4:
clearscreen
call rozkoduj c, offset text3
exitcode
@3:
inc [uniklo]
clearscreen
call rozkoduj c, offset text1
mov ah,0
int 16h
jmp @dalsi
exitcode
rozkoduj PROC C ofs
mov bx,ofs
mov di,offset buffer
@p1:
cmp byte ptr[bx],'$'
je @p2
mov al,byte ptr[bx]
shr al,1
add al,32
mov ds:[di],al
inc di
inc bx
jmp @p1
@p2:
mov byte ptr ds:[di],'$'
lea dx,buffer
mov ah,9
int 21h
ret
ENDP
end

Neprijemne jsem se pritom uz zapotil, blbe odladovani [supky at vidim svoje makra zhodnoceny ve tvejch vecech] :D
Na pochopeni po odzkouseni a dosazeni hlavni vyhry doporucuji Borlandsky debugger.
PS Na hokusy pokusy se naučíme co nevidět používat myš, klávesy jsou hloupě zastaralé.

Nahlásit jako SPAM
IP: 85.71.152.–
16bit0
Newbie
23. 2. 2009   #25
-
0
-

To o-lox :

No teď jsem na to tady koukal a popravdě se v tom moc nemůžu vyznat. Zjistil jsem, že vůbec neumim makra, že vůbec neznám pár instrukcí apod. No a i když znám, tak některý věci fakt nevim co dělaj... Ještě nad tim musim trochu podumat...Ale stejně mi dneska nějak hlava nebere!

Jo a TASM mi nechce přeložit regisr FS, píše nedefinonaný symbol!



A SEGMENT
ASSUME CS:A,DS:A
ORG 100H
.486


START:

mov ax,0b800h
mov fs,ax

int 20h

A ENDS
END START

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
6. 3. 2009   #26
-
0
-

To 16bit :

Dneska jsem začal pokusem o inicializaci vesa režimu. No jo jenomže, se to chová nějak podivně, chvili mi to šlo, pak zase ne...aniž by jsem měnil kód...no nic dyžtak k tomu tady trochu něco napiš. Taky nevím jak zapsat konkrétní byte na konkrétní adresu v paměti. PS: asi mi pořád něco uniká, budu si muset přečíst něco o základech assembleru...a teď jdu pokračovat v studierování vesa módu.

test. příklad:



xor ax,ax
mov al,02h
mov ah,4fh
mov bx,100h
int 10h


lea dx,text
mov ah,09h
int 21h
mov ah,00h
int 16h


int 20h

text db 'ahoj$'

Nahlásit jako SPAM
IP: 88.146.207.–
16bit0
Newbie
6. 3. 2009   #27
-
0
-

To Anonymní uživatel :

sry, to jsem psal já...

Dneska jsem začal pokusem o inicializaci vesa režimu. No jo jenomže, se to chová nějak podivně, chvili mi to šlo, pak zase ne...aniž by jsem měnil kód...no nic dyžtak k tomu tady trochu něco napiš. Taky nevím jak zapsat konkrétní byte na konkrétní adresu v paměti. PS: asi mi pořád něco uniká, budu si muset přečíst něco o základech assembleru...a teď jdu pokračovat v studierování vesa módu.

test. příklad:



xor ax,ax

mov al,02h

mov ah,4fh

mov bx,100h

int 10h





lea dx,text

mov ah,09h

int 21h

mov ah,00h

int 16h





int 20h



text db 'ahoj$'


EDIT: takhle by měl vypadadat zápis na konkrétní adresu:

mov byte [0xABCC], 0
jenomže ten standartní borlanďáckej překladač(TASM) z roku '89 mi to nepřeloží. PS: a i kdyby přeložil,nebude tu taky problém v tom, že ve windowsech jede procesor v protected módu? Pokud ano, nemůžu si jen tak, něco napsat někam do paměti....

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
o-lox0
Super člen
6. 3. 2009   #28
-
0
-

mov byte [0xABCC],0 - pis jako mov [0abcch],0 ; ale uz si to mohl pochytit
byte je uvnitr hranate zavorky nebo vne podle rezimu masm/ideal
+ zvolil si dost netradicni rezim 640*400
dále nekombinuj DOS textový výpis int21 a grafickou obrazovku, když už si přeskočil texťák, tak musíš zapisovat přes A000:0000
a k tomu všemu ne přímo ale přes segmentový registr kterej naplníš na A000. Text vypíšeš nějakým fontem, ani nevim jestli na to má Vesa nějakou funkci, já píšu kód na text vlastnoručně. A je to dost kódu.

Protected mod umoznuje prepnout na realny rezim virtualni 86ky a to že se ve skutečnoti zapíše to z 0ABCC nekam jinam mne ještě nikdá netrápilo.

bx,si,di,bp registry pro adresaci nemusíš používat když si dáš překlad 32 bitově , eax,ecx,edx, jdou kliďánko používat. [eax+20],[esi+eax], ...
Celkově jdou tvoje výkony ke dnu. Dělej něco do hloubky. Makro ti napíšu, když uvidim že to nebude kvuli "ahoj". Zkus si i pohledat.

Nahlásit jako SPAM
IP: 85.71.152.–
16bit0
Newbie
6. 3. 2009   #29
-
0
-

To o-lox :

mov byte [0xABCC],0 - pis jako mov [0abcch],0 ; ale uz si to mohl pochytit

což to už jsem doopravdy pochytil, problém je v tom, že druhou varianta také nejde....

byte je uvnitr hranate zavorky nebo vne podle rezimu masm/ideal
+ zvolil si dost netradicni rezim 640*400

dále nekombinuj DOS textový výpis int21 a grafickou obrazovku, když už si přeskočil texťák, tak musíš zapisovat přes A000:0000
a k tomu všemu ne přímo ale přes segmentový registr kterej naplníš na A000. Text vypíšeš nějakým fontem, ani nevim jestli na to má Vesa nějakou funkci, já píšu kód na text vlastnoručně. A je to dost kódu.

jo myslím, že tay funkce na fonty tam jssou.

Protected mod umoznuje prepnout na realny rezim virtualni 86ky a to že se ve skutečnoti zapíše to z 0ABCC nekam jinam mne ještě nikdá netrápilo.

bx,si,di,bp registry pro adresaci nemusíš používat když si dáš překlad 32 bitově , eax,ecx,edx, jdou kliďánko používat. [eax+20],[esi+eax], ...
Celkově jdou tvoje výkony ke dnu. Dělej něco do hloubky. Makro ti napíšu, když uvidim že to nebude kvuli "ahoj". Zkus si i pohledat.


:-)) jo tuhle větu jsem čekal...dej mi čas a já něco stvořim nebo dej mi typ na něco co bych mohl naprogramovat, mám na to slabou fantazii.

Nahlásit jako SPAM
IP: 88.146.207.–
Variables are the best of all
o-lox0
Super člen
8. 3. 2009   #30
-
0
-

Používáš klíčové slovo ptr pro paměťový chlívek? Proč sem nenapíšeš tu chybu??
Nějaké zadání na šplouch obrazovky máš (to Int15). Použij ale 320*200*256 režim, abys nemusel přepínat banky. Výpočet souřadnic jsem nadhodil.
Koukal jsem na Vesa funkce a výpis jsem tam nenašel.

Nahlásit jako SPAM
IP: 85.71.152.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
2. 9. 2009   #31
-
0
-

To 16bit :

Podle mě to s P4 nesouvisí, ale s tím, že ty textové proměnné nemáš ukončené znakem ukončení. To bývá znak $ v některých případech a nebo znak "NULL"... Záleží jakou funkci k výpisu použiješ.

Nahlásit jako SPAM
IP: 82.100.11.–
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, 94 hostů

Podobná vlákna

Překlad A na 1 — založil Petr Zbořil

Překlad — založil Franceq

Překlad — založil tudlifuk

Preklad z AJ do CJ PLS — založil Tomáš

Překlad z Delphi — založil neo_

 

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