Assembler - pomoc s jednoduchým prográmkem Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

symetrala
Level 3.5
Level 3.5
Příspěvky: 756
Registrován: srpen 11
Pohlaví: Muž
Stav:
Offline

Assembler - pomoc s jednoduchým prográmkem  Vyřešeno

Příspěvekod symetrala » 20 led 2013 23:09

Dobry den, dokazal by nekdo napsat v assembleru tento program? Kolik ulozenych cisel ve formatu word (2byte) v oblasti pameti AAAA-ACA9 je vetsi nez 32767? Dekuji
Naposledy upravil(a) Ltb dne 21 led 2013 00:01, celkem upraveno 1 x.
Důvod: Úprava nadpisu

Reklama
Uziv00
Pohlaví: Nespecifikováno

Re: Assembler - pomoc s jednoduchým prográmkem

Příspěvekod Uziv00 » 21 led 2013 09:10

Napsat nenapíšu, co jsem naposled psal v assembleru, hodně se změnilo (naposled na 8080A).
Ale snad tě navedu:
1. Inicializace
mov word ptr eax, ACA9
mov word ptr ebx, 7FFF
mov word ptr ecx, 0
mov word ptr edx, AAAA
2. rutina
cmp ebx, [edx]
test na carry příznak pokud ano, call
inc edx
inc edx
cmp ebx, edx
test na carry příznak, pokud ne, skok na rutina
konec
3. call
inc ecx
ret
V registru eax je konečná adresa, v reg. edx počáteční, v ebx porovnávaná hodnota, v ecx bude po skončení výsledek. Nejsem si úplně jist posunem adresy 2x (inc edx) a taky si budeš muset sám přijít na test carry přenosu při volání call (u skoku je to jc)

symetrala
Level 3.5
Level 3.5
Příspěvky: 756
Registrován: srpen 11
Pohlaví: Muž
Stav:
Offline

Re: Assembler - pomoc s jednoduchým prográmkem

Příspěvekod symetrala » 21 led 2013 18:08

ptr a cmp dela co? jinak diky

Uziv00
Pohlaví: Nespecifikováno

Re: Assembler - pomoc s jednoduchým prográmkem

Příspěvekod Uziv00 » 21 led 2013 18:22

cmp = compare => porovnává. Když je operand2 větší než operand 1, nastaví carry na 1
mov word ptr říká, že jde o proměnnou word - tedy 16 bitů. kromě toho existuje byte to je jasné. Bez ptr jde o proměnnou v délce 32 bitů.

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Assembler - pomoc s jednoduchým prográmkem

Příspěvekod faraon » 21 led 2013 18:46

ITCrowd: PMI-80? Já jsem se pokoušel o Z80 na Didaktiku, ale BASIC byl silnější :lol:

symetrala: Ještě nám prozraď pro jaký procesor to má být, protože tohle je u každého jiné. Navíc třeba Intel 8080 nebo 8086 je Little Endian, takže nižší byte bude v paměti pod vyšším, Motorola 6800 je Big Endian, tam nižší byte bude nad vyšším, zatímco u Intel 8051 je to celkem jedno, protože nedokáže načíst šestnáct bitů najednou (ale v programové paměti používá Big Endian). A jestli jde o dvaatřicetibitový ARM, tak ten je dokonce Middle Endian, protože to má pomíchané!

Pro informaci o celém instrukčním souboru 8080 se podívej sem: http://www.classiccmp.org/dunfield/r/8080.txt

P.S. aby bylo z čeho vybírat:
8051: http://www.win.tue.nl/~aeb/comp/8051/set8051.html
8086: http://www.electronics.dit.ie/staff/tsc ... n_set.html
Naposledy upravil(a) faraon dne 21 led 2013 21:17, celkem upraveno 1 x.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uziv00
Pohlaví: Nespecifikováno

Re: Assembler - pomoc s jednoduchým prográmkem

Příspěvekod Uziv00 » 21 led 2013 18:48

já to nepsal pro 8080! ten stejně uměl jen 8 bitů. Tohle by mělo být z intelovské instrukční sady pro normální procesory.

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Assembler - pomoc s jednoduchým prográmkem

Příspěvekod faraon » 21 led 2013 19:05

Promiň, já přečetl jen ten text předtím a nekouknul jsem se do kódu, to by mi hned u toho EAX došlo :oops:

Ale 8080 také uměl pracovat s šestnáctibitovými čísly, používal přece dvojregistry...
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

symetrala
Level 3.5
Level 3.5
Příspěvky: 756
Registrován: srpen 11
Pohlaví: Muž
Stav:
Offline

Re: Assembler - pomoc s jednoduchým prográmkem

Příspěvekod symetrala » 21 led 2013 21:14

zkousim to na jednom skolnim simulatoru, typ procesoru nevim...

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Assembler - pomoc s jednoduchým prográmkem

Příspěvekod faraon » 21 led 2013 21:53

To je moc málo informací, potřeboval bych znát instrukční sadu toho procesoru, kolik registrů má a co se s nimi dá dělat, prostě jeho vlastnosti, a třeba také kolikabitový vůbec je... Máš k tomu nějakou dokumentaci?

Zatím jsem si trochu vypomohl pomocí Céčka a GCC, takže pro inspiraci:

Kód: Vybrat vše

   movl   $0, -24(%ebp)
   movl   $43690, -28(%ebp)
   jmp   .L5
.L6:
   movl   -28(%ebp), %eax
   addl   -8(%ebp), %eax
   movzbl   (%eax), %eax
   testb   %al, %al
   jns   .L7
   addl   $1, -24(%ebp)
.L7:
   addl   $2, -28(%ebp)
.L5:
   cmpl   $44200, -28(%ebp)
   jle   .L6

To mi ještě připomíná ten původní kód, když jsem zapnul mírnou optimalizaci, tak to vypadá o dost zajímavěji (netvrdím že chápu co to dělá):

Kód: Vybrat vše

   movl   $0, %edx
   movl   $0, %eax
.L4:
   cmpb   $-128, 43690(%esi,%eax,2)
   sbbl   $-1, %edx
   addl   $1, %eax
   cmpl   $256, %eax
   jne   .L4

A s maximální optimalizací to vyvádí ještě šílenější věci:

Kód: Vybrat vše

   xorl   %edx, %edx
   xorl   %eax, %eax
.L4:
   cmpb   $-128, 43690(%esi,%eax,2)
   sbbl   $-1, %edx
   addl   $1, %eax
   cmpl   $256, %eax
   jne   .L4

Je to tedy dvaatřicetibitový kód pro 386, neadresuji přímo paměť, ale pole, a pracovní hodnoty si to drží v proměnných na zásobníku místo v registrech, proto jsou tam ty hrůzy jako -28(%ebp).
Jestli to chceš luštit, tak čísla jsou desítková, uvozená $, registry %, labely pro skoky jsou .L, a pozor na to že instrukce mají obrácené pořadí operandů než intelovský assembler, takže movl odkud, kam!
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Pomoc s webem
    od Tay » 09 úno 2025 15:53 » v Web-tipy a vaše weby
    5
    19850
    od Tay Zobrazit poslední příspěvek
    10 úno 2025 12:09
  • Pomoc při taktu Příloha(y)
    od ondyN » 14 led 2025 15:53 » v Taktování a další úpravy PC
    2
    6812
    od Dyonysos Zobrazit poslední příspěvek
    14 led 2025 16:19
  • Pomoc s výběrem notebooku na hry
    od Ghoust23 » 23 zář 2024 08:25 » v Rady s výběrem hw a sestavením PC
    4
    2856
    od petr22 Zobrazit poslední příspěvek
    24 zář 2024 07:32
  • PC do 20k (pomoc s dovýběrem komponent)
    od insider » 27 zář 2024 16:46 » v Rady s výběrem hw a sestavením PC
    11
    4068
    od insider Zobrazit poslední příspěvek
    03 říj 2024 09:03
  • Pomoc se zpomaleným notebookem
    od trefort » 29 zář 2024 14:02 » v Problémy s hardwarem
    8
    2820
    od atari Zobrazit poslední příspěvek
    30 zář 2024 10:04

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host