A cimet egy kicsit bövebben kifejtenem. Van egy valag assembly forraskodom, amit at kellene irni C-re. Letezik-e ilyen ''csoda'' dolog, es ha igen, akkor milyen feltetelek mellett?
Gyorskeresés
Legfrissebb anyagok
Általános témák
LOGOUT.hu témák
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] Elektromos rásegítésű kerékpárok
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [galaxy55:] Mi történt deviantart-on?
- [Re:] Spyra: nagynyomású, akkus, automata vízipuska
- [Re:] eBay-es kütyük kis pénzért
- [Re:] [Sub-ZeRo:] Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- [Re:] [TheLázs:] ADHS
- [Re:] [sh4d0w:] Windows Recall
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Hozzászólások
aurum
senior tag
max inline assembly-kent tudo c fuggvenyekbe agyazni.
I fuck the corner of your mouth, my dear Alexander!!
Blackmate
senior tag
Ne keseritsetek el ennyire
Szoval C -> Assembly van! Vannak linkerek, libraryk, tehat assemblybe tudok forditani. Visszafele nem menne?
Csak azert kell ez nekem, mert C-ben kell irnom egy mikrokontrollerhez progit. Viszont a dokumentacioba az összes peldaprogram Assembly-be van. Es valahogy a hatam közepere kivanom most az assemblyt megtanulni.
Miracle
senior tag
keress C forditot es fuggvenykonyvtarat a kontrollerhez.
de a te problemad tavol all a visszaforditastol. a rendszerhivasoknak nincs megfelflo c kodja. csak ha valaki keszitett hozzajuk egy konyvtarat, akkor lesznek konyvtari fuggvenyek.
de ha minden rendelkezesedre all c nyelven, akkor akar te is csinalhatsz fuggvenykonyvtarat
értelmező késziszótár :: rekurzió --> lásd : rekurzió
Blackmate
senior tag
Hm lehetne egy kicsit bövebben?
Mint emlitettem C-böl tudok assemblybe forditani tökeletesen. Tehat elvileg minden függvenykönyvtar adott. Vagy nem?
Miracle
senior tag
ha megvannak az ASM eljarasok, akkor azokat C fuggvenyek implementaciojakent kell felhasznalnod, ezek a fuggvenyek lesznek a te figgvenykonyvtarad. de C fordito melle 99.999999% hogy mar letezik adott fuggvenykonyvtar, ennek kell utanajarni. legorrszabb esetben egy mail valami ezzel a mikrontrollerrel dolgozo cegnek/a fordito fejlesztojenek.
értelmező késziszótár :: rekurzió --> lásd : rekurzió
Blackmate
senior tag
A következö kis program reszletet kellene C-re valahogy atültetnem. Barmilyen segitseg jol jönne
1 start: mov SP,#STACK-1 ; set stack
2 mov dptr,#IN2BUF ; fill EP2IN buffer with
3 mov r7,#64 ; decrementing counter
4 fill: mov a,r7
5 movx @dptr,a
6 inc dptr
7 djnz r7,rill
8 ;
9 mov r1,#0 ; r1 is IN token counter
10 mov r2,#0 ; r2 is OUT token counter
11 mov dptr,#IN2BC ; Point to EP2 Byte Count register
12 mov a,#40h ; 64-byte transfer
13 movx @dptr,a ; arm the IN2 transfer
14 ;
15 loop: mov dptr,#IN2CS ; poll the EP2-IN Status
16 movx a,@dptr
17 jnb acc.1,serviceIN2 ; not busy--keep looping
18 mov dptr,#OUT2CS
19 movx a,@dptr
20 jb acc.1,loop ; EP2OUT is busy--keep looping
21 ;
22 serviceOUT2:
23 inc r2 ; OUT packet counter
24 mov dptr,#OUT2BC ; load byte count register to re-arm
25 movx @dptr,a ; (any value)
26 sjmp loop
27 ;
28 serviceIN2:
29 inc r1 ; IN packet counter
30 mov dptr,3IN2BUF .|. the first data byte
31 mov a,r1 ; in EP2IN buffer
32 movx @dptr,a
33 inc dptr ; second byte in buffer
34 mov a,r2 ; get number of OUT packets
35 movx @dptr,a
36 mov dptr,#IN2BC ; point to EP2IN Byte Count Register
37 mov a,#40h
38 movx @dptr,a ; load bc=64 to re-arm IN2
39 sjmp loop
40 ;
41 END
Rover623
félisten
Szvsz egyszerű...
Értelmezd a kódot és szépen írd meg C-ben...
Pl. minden regiszter egy változó lesz...
Értékadások, aritmetikai műveletek értelemszerűen...
Portműveletek szintén értelemszerűen...
Ha a ciklust felismered, egyszerűen meg lehet írni...
Másképp nem megy!!!
Gépesíteni ezt piszok nehéz...nem is nagyon láttam még ilyesmit...
Arra viszont számíts, hogy sokkal lassabb lesz mint az eredeti...
Erősen hardware közeli dolgokat meg (interrupt kezelés, DMA) igen nehezen és körültekintően lehet csak átültetni...
primus inter pares
Blackmate
senior tag
Egy kicsit konkretabban nem lehetne? Tudom, hogy neked se 2 perc, de velem ugy megutalatattak az assemblyt, hogy hanyni tudnek töle.
Rover623
félisten
Több gond is van...egy bő évtizede nem kódoltam C-ben, ezt az assembly-t meg pláne nem ismerem...
De mondjuk Pascal-ban be tudom mutatni.
Var
STACK : Array [....] of Byte; {hogy legyen mire hivatkozni, de lehet hogy nem is kell}
IN2BUF: Array [....] of Byte; {mit tudom én mekkora?}
IN2CS : Byte Absolute x:x;
OUT2CS : Byte Absolute x:x;
IN2BC,
OUT2BC,
SP,
DPTR,
R1,
R2,
R7,
A : Byte; {feltételezem 8 bites controller}
Begin
Start: {nem kell, de jól mutat...}
{a stack kezelést nem boncolgatnám, hosszú...}
DPTR := 0;
R7 := $64;
Fill:
A := R7; {szvsz felesleges, mert ez az akkumulátor}
IN2BUF[DPTR] := A; {közvetlenül mehetne bele az R7}
Inc(DPTR);
If (R7 <> 0) Then Goto Fill; {jujj de csúnya...}
R1 := 0;
R2 := 0;
A := $40;
IN2BC := A;
Loop:
A := IN2CS; {ez valami kitüntettett memóriacímen lévő beágyazott IO-nak tűnik}
{na itt már gond van, az ACC valami bitszintű compare utasításnak tűnik...}
If (A and 1) = 0 Then Goto serviceIN2;
A := OUT2CS;
If (A and 1) = 1 Then Goto Loop;
ServiceOUT2:
Inc(R2);
OUT2BC := A; {nem egy elegáns megoldás, A határozatlan?}
Goto Loop;{? csak találgatok sjmp-t illetően...}
ServiceIN2:
és így tovább....
End.
Tehát ismerni kellene a controller memóriakiosztását, a beágyazott IO regiszterek helyét, az assembly utasítások pontos jelentését...
C-ben a DPTR-en keresztüli címzést egészen jól le lehetne modellezni a ''kukacos'' pointerkezeléssel...
[Szerkesztve]
[Szerkesztve]
primus inter pares
kisfurko
senior tag
Hmm... Ha ennyire utálod az assembly-t, akkor miért mikrokontrollerekkel foglalkozol? Ha nem érted meg a mikrokontroller lelkivilágát, akkor hogyan akarsz C programot írni hozzá?
Egyébként, ha tényleg tanultál assembly-t, akkor csak elő kell venni a mikrokontroller doksiját, végigfutni az utasításkészletet, meg a regiszterkiosztást. Utána utasításról utasításra szépen lapozgatva a doksit simán megérted, mit csinál, pláne kommentezett kódnál.
Egyébként meg nem létezhet olyan tool, ami assemblyből C-be fordít, mert pl. flag-ek nincsenek kezelve a C-ben, már egy elágazást sem tudsz visszafordítani. Persze az adott processzorhoz lehet írni egy ilyet, de aki annyira ért hozzá, az simán összelinkeli a C kódot az assemlby-vel. Igazából nem is értem, minek C-be fordítani...
wfjo
csendes tag
hello.
tudnatok segiteni com port programozasaban? (asm) eleg sokat tanulmanyoztam de igazan vilagos. esetleg valami peldaprg-t ? hogyan lehet kuldeni es fogadni ?
oldalaim: http://www.oazigazi.hu + http://www.szakemberadatbazis.hu + http://www.hirfriss.hu + http://tv-musor.hirfriss.hu
kisfurko
senior tag
1. Beállítod a baud rate-et. Ez 1843200/16/x, ahol x az osztó, amit beállítasz. Tehát bázis+3-ra írsz egyet úgy, hogy a 7. bit 1-es. Ezután az alsó és felső byte-ját az osztónak beírod a bázis+0 és +1-be.
2. Beállítod az adatformátumot a bázis+3-on és egyúttal a 7. bit 0-ra. A 6. bit is 0, mert nem kell BREAK.
Ezután már tudsz kommunikálni a bázis+0-n, oda kell írni, illetve onnan kell olvasni. Csak akkor írhatsz oda, ha az adó adatregisztere üres, tehát ha a bázis+5 5. bitje 1. Olvasni akkor kell, ha a vevő adatregisztere nem üres, tehát bázis+5 0. bitje 1.
Ha kell megszakítás is, akkor szólj!
Tehát:
mov dx,bázis
mov bx,dx
add dx,3
mov al,80h
out dx,al
mov ax,osztó
mov dx,bx
out dx,ax
add dx,3
mov al,00000011b ;nincs paritás, 1 stop, 8 adat
out dx,al
Kiírás:
mov dx,bázis
add dx,5
waittransmit:
in al,dx
test al,20h
jz waittransmit
mov al,amit ki akarsz írni
sub dx,5
out dx,al
Beolvasás:
mov dx,bázis
add dx,5
waitreceive:
in al,dx
test al,1
jz waitreceive
sub dx,5
in al,dx
Ezek persze elég gagyik, megszakítással illik pufferbe/ből dolgozni.
Remélem nem hibáztam
wfjo
csendes tag
thx a valaszt m eg egy kiiratast szeretnek beiktatni ien ciklus szeruen olvaso reszbe h lassam jon e vmi al be kerul elvileg a cucc ?
oldalaim: http://www.oazigazi.hu + http://www.szakemberadatbazis.hu + http://www.hirfriss.hu + http://tv-musor.hirfriss.hu
kisfurko
senior tag
Aham, al-be olvas az in al,dx.
JoeYi
őstag
Hi! Tudna nekem valaki turboc- hez küldeni assemblert. Írtam egy játékot és abba akarok assemblyt berakni. Kiírja, hogy tcc -vel futassam. Megteszem, de az meg tasm.exe -t kér. Az meg nincs. help
kisfurko
senior tag
Szerintem lehet inline assembly-zni, turbo pascalban lehetett. De ha mégsem, akkor keress rá a tasm-ra, úgy tudom, ingyenes.
wfjo
csendes tag
helo.
ami albe kerul az 8 bit ? vagy a 8+1 ? ha nem nagy gond tudnal irni fogado oldalra egy olyan kis reszt ami kiirja karaktert kepernyore ha jott adat ?
oldalaim: http://www.oazigazi.hu + http://www.szakemberadatbazis.hu + http://www.hirfriss.hu + http://tv-musor.hirfriss.hu
kisfurko
senior tag
A kódban ott van, hogy 8 adatbit, nincs paritás. Szerintem nem is szoktak 8 bites paritásos átvitelt használni.
Fogalmam sincs, milyen operációs rendszerre kell neked. Ha DOS, akkor
mov ah,2
mov dl,kiírandó karakter (ez persze ASCII)
int 21h
Blackmate
senior tag
Hogyan lehet C-be implementalni a #HIGH es a #LOW memoriacimzeseket?
- Privát
- 2009-12-14 15:47:49
discpatkany
csendes tag
Valaki tudna segíteni meg kellene írnom egy assemly programot holnapra!
Három feladatom van de csak egyet kellene beadnom. aki tudna segiteni azt megköszönném.
A kérdések:
Alkalmazástechnikai feladatok listája:
1. Készíts a grafikus képernyőn kígyó-játékot! Egy kígyót kell a billentyűzetről úgy irányítani, hogy az nem ütközhet a játéktér oldalába, a falakba, vagy a saját törzsébe! Opcionálisan kiegészítheted időméréssel, illetve gyümölcsszedéssel, ami hosszabbítja a kígyó törzsét.
2. Készíts a karakteres képernyőn egy labdát (O betű szimbolizálhatja), ami 45 fokos szögben haladhat a képernyőn (billentyűlenyomásig), a széleiről visszapattanva.
3. Készíts programot, ami egy fájlból beolvasott rövid szöveget képes a karakteres képernyőre 8 tetszőleges irány bármelyikébe kiírni! (1: fel, 2. jobbra fel, 3. jobbra, 4. jobbra le, stb.)
ja és csak karakteres képernyőt használhatok
előre is köszönöm
(#24) Jester01 válasza discpatkany (#23) üzenetére
- Privát
- 2009-12-14 16:35:34
Jester01
veterán
Az egy dolog, hogy rengeteg emberke nem tanul rendesen. Na de hogy még a feladat megírását is csak a leadást megelőző nap kéred (friss regisztrációval a rossz topikban) az már a pofátlanság netovábbja
A hab a tortán, hogy se processzort se operációs rendszert se fordítóprogramot nem jelöltél meg. Kedvem lenne poénból megírni LC3-ban
Hogy valamit segítsek is: szerintem a harmadik a legegyszerűbb.
Jester