Hirdetés

2024. június 10., hétfő

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Assembly -> c (téma lezárva)

Hozzászólások

(#1) Blackmate


Blackmate
senior tag

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?

(#2) Hory válasza Blackmate (#1) üzenetére


Hory
aktív tag

Nem létezik.

(#3) aurum válasza Blackmate (#1) üzenetére


aurum
senior tag

max inline assembly-kent tudo c fuggvenyekbe agyazni.

I fuck the corner of your mouth, my dear Alexander!!

(#4) Blackmate


Blackmate
senior tag

Ne keseritsetek el ennyire :O

Szoval C -> Assembly van! Vannak linkerek, libraryk, tehat assemblybe tudok forditani. Visszafele nem menne? :F

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.

(#5) Miracle válasza Blackmate (#4) üzenetére


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ó

(#6) Blackmate válasza Miracle (#5) üzenetére


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? :)

(#7) Miracle válasza Blackmate (#6) üzenetére


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ó

(#8) Blackmate


Blackmate
senior tag

A következö kis program reszletet kellene C-re valahogy atültetnem. Barmilyen segitseg jol jönne :O

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

(#9) Rover623 válasza Blackmate (#8) üzenetére


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...:U

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

(#10) Blackmate válasza Rover623 (#9) üzenetére


Blackmate
senior tag

:O

Egy kicsit konkretabban nem lehetne? Tudom, hogy neked se 2 perc, de velem ugy megutalatattak az assemblyt, hogy hanyni tudnek töle.

(#11) Rover623 válasza Blackmate (#10) üzenetére


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

(#12) kisfurko válasza Blackmate (#10) üzenetére


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...

(#13) wfjo


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

(#14) kisfurko válasza wfjo (#13) üzenetére


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 :))

(#15) wfjo válasza kisfurko (#14) üzenetére


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

(#16) kisfurko válasza wfjo (#15) üzenetére


kisfurko
senior tag

Aham, al-be olvas az in al,dx.

(#17) JoeYi


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

(#18) kisfurko válasza JoeYi (#17) üzenetére


kisfurko
senior tag

Szerintem lehet inline assembly-zni, turbo pascalban lehetett. De ha mégsem, akkor keress rá a tasm-ra, úgy tudom, ingyenes.

(#19) wfjo válasza kisfurko (#16) üzenetére


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

(#20) kisfurko válasza wfjo (#19) üzenetére


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

(#21) Blackmate


Blackmate
senior tag

Hogyan lehet C-be implementalni a #HIGH es a #LOW memoriacimzeseket?

(#22) Blackmate válasza Blackmate (#21) üzenetére


Blackmate
senior tag

uP

(#23) discpatkany


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


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 :U

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 :C

Hogy valamit segítsek is: szerintem a harmadik a legegyszerűbb.

Jester

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Assembly -> c (téma lezárva)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.