Deleni na '51 - word/byte

jiri@bezstarosti.cz jiri
Středa Březen 17 12:06:55 CET 2004


Ano, "normalne" se posune bitove k vyssim bitum tak, aby byl jeste stale
mensi
nez ten dlouhy a pak se odecte. Pak se posune o bit mene a zase odecte,
pokud
v tom vyssim jeste tolik je atd.. A protoze je posuv k vyssim bitum nasobeni
2,
vite presne, kolikrat jste to odecetl, jen se Vam to podari odecitat po
vetsich kusech.
Tedy to vydelite podstatne rychleji, nez byste to stale odecital obycejne.

--
Jiri Bezstarosti

-----Original Message-----
From: Jiri Drozd [mailto:jirkonf@seznam.cz]
Sent: Saturday, November 24, 2001 5:59 PM
To: Konference HW serveru
Subject: Deleni na '51 - word/byte


  Zdravim konferujici,
hraju si s pripojenim harddisku (IDE) k AT89C51. Zatim umim precist
libovolny sektor disku znam-li jeho CHS parametry (zkousim to na 80MB disku,
takze problemy s velkymi disky zatim nemam). Chtel jsem naucit tenhle muj
bastl cist disky s FAT16 a pri programovani sem narazil na problem deleni
ctyrbajtoveho cisla (double word) cislem jednobajtovym. Potrebuju totiz
udelat prevod z cisla sektoru na CHS (kdyz je treba precist sektor cislo
23654 tak aby to spocitalo ze je to cylinder X, hlava Y a sektor Z). Takze
potrebuju delit cislo postupne jednotlivymi pocty sektoru, hlav a cylindru a
z toho vypocitat X, Y a Z. Problem je v tom, ze '51 zna na deleni pouze
instrukci DIV AB, ktera vydeli dve jednobytova cisla. Premyslel jsem jak to
udelat, vychazeje trebas z normalniho pisemneho deleni

mejme napr vypocitat 1E445FA0/3E (=7CF948 zbytek 30)
takze 1E4/3E=7 zbytek 32 sepiseme 4
324/3E=C zbytek 3C sepiseme 5
3C5/3E=F zbytek 23 sepiseme F
23F/3E=9 zbytek 11 sepiseme A
11A/3E=4 zbytek 22 sepiseme 0
220/3E=8 zbytek 30

toto sice vychazi, jenze nelze primo naprogramovat na '51 protoze je opet
treba delit cisla vetsi nez jednobytove (324, 3C5, 23F...). Nicmene pokud
bych umel vydeli dvojbyttove cislo (word) jednobytovym (byte), muzu vyse
popsany postup aplikovat na libovolne dlouhe cislo delene jednobytovym.
Problem je v tom, ze nevim jak provest operaci word/byte (jejimz vysledkem
bude cela cast po deleni, pripadne i zbytek, ale ten uz bych dokazal
dopocitat...), coz je ma otazka a duvod proc pisu tenhle mail. Samozrejme,
da se to udelat metodou postupneho odecitani delitele od delence jenze v
pripade ze bude delitel male cislo (2,3...) bude tato operace trvat dlouho.
  Jak tedy na to efektivneji? Musi prece existovat nejaka "normalni"
metoda...

JIRKA





Další informace o konferenci Hw-list