{"id":393,"date":"2017-07-15T11:13:57","date_gmt":"2017-07-15T10:13:57","guid":{"rendered":"https:\/\/www.pmd85.cz\/?page_id=393"},"modified":"2017-07-15T11:15:27","modified_gmt":"2017-07-15T10:15:27","slug":"prevod-binarni-hodnoty-na-format-bcd","status":"publish","type":"page","link":"https:\/\/www.pmd85.cz\/?page_id=393","title":{"rendered":"P\u0159evod bin\u00e1rn\u00ed hodnoty na form\u00e1t BCD"},"content":{"rendered":"<p>Dal\u0161\u00ed z \u0159ady \u0159e\u0161en\u00fdch element\u00e1rn\u00edch \u00faloh je p\u0159evod bin\u00e1rn\u00ed hodnoty na form\u00e1t BCD, kde ka\u017ed\u00e1 cifra v rozsahu 0..9 je (pon\u011bkud ne\u00fasporn\u011b) ulo\u017eena ve \u010dty\u0159ech za sebou jdouc\u00edch bitech. Do jednoho osmibitov\u00e9ho registru se pak vejdou takov\u00e9to BCD cifry dv\u011b.<\/p>\n<p>A aby to bylo \u00fapln\u011b jasn\u00e9, uvedu p\u0159\u00edklad. M\u00e1m ve zvolen\u00e9m\u00a0registru hodnotu C0h\u00a0a chci ji vytisknout jako &#8222;lidsk\u00e9&#8220; \u010d\u00edslo. Ide\u00e1ln\u011b o\u010dek\u00e1v\u00e1m v\u00fdsledek 192. Tak\u017ee napln\u00edm registr\u00a0hodnotou C0h, zavol\u00e1m proceduru pro p\u0159evod BIN&gt;BCD a nap\u0159\u00edklad v registrov\u00e9m p\u00e1ru D:E se mi vr\u00e1t\u00ed hodnota 0000 0001 1001 0010 (bin\u00e1rn\u011b). Co\u017e jsou ve spr\u00e1vn\u00e9m po\u0159ad\u00ed BCD cifry 0192. Zb\u00fdv\u00e1 jen tyto cifry vytisknout, \u010di si je n\u011bkde ulo\u017eit. Ale to u\u017e je jin\u00e1 \u00faloha.<\/p>\n<p>N\u00e1sleduj\u00edc\u00ed vzorov\u00e9 procedury jsou sice ur\u010deny pro procesor i8080, nicm\u00e9n\u011b asi ka\u017ed\u00fd procesor obsahuje instrukci pro dekadickou korekci, na i8080 nazvanou DAA (instruk\u010dn\u00ed k\u00f3d 27h). Pokud by ji pou\u017eit\u00fd procesor neobsahoval, lze si napsat d\u00edl\u010d\u00ed proceduru dle funk\u010dn\u00edho popisu instrukce DAA:<\/p>\n<ol>\n<li>Je-li hodnota 4 nejni\u017e\u0161\u00edch bit\u016f registru v\u011bt\u0161\u00ed ne\u017e 9, nebo je nastaven p\u0159\u00edznak AC z p\u0159edchoz\u00edho kroku, p\u0159ipo\u010dte se k registru \u010d\u00edslo 6\u00a0(korekce ni\u017e\u0161\u00ed BCD cifry).<\/li>\n<li>Pokud je nyn\u00ed hodnota 4 nejvy\u0161\u0161\u00edch bit\u016f registru v\u011bt\u0161\u00ed ne\u017e 9, nebo je nastaven p\u0159\u00edznak CY z p\u0159edchoz\u00edho kroku, p\u0159ipo\u010dte se k registru \u010d\u00edslo 60h (korekce vy\u0161\u0161\u00ed BCD cifry).<\/li>\n<\/ol>\n<p>Speci\u00e1ln\u00ed p\u0159\u00edpad b\u00edl\u00e9ho trpasl\u00edka pro jednoduch\u00fd\u00a0p\u0159evod osmibitov\u00e9 bin\u00e1rn\u00ed hodnoty v rozsahu 00..99 na procesoru rodiny i8051je instrukce DIV AB. Sta\u010d\u00ed do registru A na\u010d\u00edst p\u0159ev\u00e1d\u011bn\u00e9 bin\u00e1rn\u00ed \u010d\u00edslo, do registru B na\u010dtu hodnotu 10 (des\u00edtkov\u011b) a po proveden\u00ed instrukce DIV AB m\u00e1m v registru A po\u010det des\u00edtek a v registru B po\u010det jednotek BCD \u010d\u00edsla. Oboj\u00ed zaru\u010den\u011b v rozsahu 0..9.<\/p>\n<p>V\u0161ech p\u011bt uveden\u00fdch demonstra\u010dn\u00edch procedur vyu\u017e\u00edv\u00e1 sekvence instrukc\u00ed DAD H\/ADC A. Pokud tuto sekvenci zopakuji osmkr\u00e1t, p\u0159esunu \u010d\u00edslo z registru H do registru A. Pokud za ka\u017ed\u00fdm krokem provedu instrukci DAA, budu postupn\u011b p\u0159ev\u00e1d\u011bt v\u00e1hy p\u016fvodn\u00edho, \u0161estn\u00e1ctkov\u00e9ho, \u010d\u00edsla 80h-40h-20h-10h-08h-04h-02h-01h na dekadick\u00e9 ekvivalenty 128-64-32-16-8-4-2-1. V tomto zjednodu\u0161en\u00e9m p\u0159\u00edkladu ov\u0161em mohu takto p\u0159ev\u00e1d\u011bt \u010d\u00edsla v rozsahu 00..99, nebo\u0165 t\u0159et\u00ed cifra \u0159\u00e1du stovek se ji\u017e do &#8222;dvoum\u00edstn\u00e9ho&#8220; registru A nevejde. Ale princip funguje takto.<\/p>\n<p>Jak jsem ji\u017e napsal, procedur je p\u011bt. Dv\u011b pro \u0161estn\u00e1ctibitov\u00e9 vstupn\u00ed bin\u00e1rn\u00ed \u010d\u00edslo a dv\u011b pro osmibitov\u00e9 vstupn\u00ed \u010d\u00edslo. Ta p\u00e1t\u00e1 &#8222;b7bcdf&#8220;\u00a0je pak &#8222;rychlostn\u00ed&#8220; variantou &#8222;b7bcd&#8220; pro p\u0159\u00edpad, \u017ee nem\u00e1te moc strojov\u00e9ho \u010dasu k dispozici a vyu\u017e\u00edv\u00e1te jen omezen\u00fd vstupn\u00ed rozsah hodnot, zde 00..99. Vynech\u00e1n\u00ed cyklu FOR\/NEXT p\u0159inese zkr\u00e1cen\u00ed\u00a0doby vykon\u00e1v\u00e1n\u00ed procedury na\u00a055% p\u016fvodn\u00ed hodnoty. A to u\u017e stoj\u00ed za to. Obecn\u011b lze pou\u017e\u00edt jen tu nejuniverz\u00e1ln\u011bj\u0161\u00ed proceduru (b16bcd) ale v praxi je to v\u017edy\u00a0kompromis mezi rychlost\u00ed (po\u010dtem takt\u016f) a t\u00edm, co procedura um\u00ed (jak je univerz\u00e1ln\u00ed).<\/p>\n<p><img loading=\"lazy\" class=\"alignleft wp-image-394 size-full\" src=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/BINBCDtable.png\" alt=\"\" width=\"322\" height=\"144\" srcset=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/BINBCDtable.png 322w, https:\/\/www.pmd85.cz\/wp-content\/uploads\/BINBCDtable-300x134.png 300w\" sizes=\"(max-width: 322px) 100vw, 322px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>D\u00e9lka 19 bajt\u016f u procedur &#8222;b8bcd&#8220; a &#8222;b15bcd&#8220; nen\u00ed n\u00e1hodn\u00e1. Jsou to identick\u00e9 procedury, jen s odli\u0161n\u00fdm po\u010dtem p\u0159ev\u00e1d\u011bn\u00fdch bit\u016f (bu\u010f osm nebo \u0161estn\u00e1ct).<\/p>\n<p><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/binbcd.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Vzorov\u00fd program s procedurami pro p\u0159evod bin\u00e1rn\u00edch \u010d\u00edsel na form\u00e1t BCD<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dal\u0161\u00ed z \u0159ady \u0159e\u0161en\u00fdch element\u00e1rn\u00edch \u00faloh je p\u0159evod bin\u00e1rn\u00ed hodnoty na form\u00e1t BCD, kde ka\u017ed\u00e1 cifra v rozsahu 0..9 je (pon\u011bkud ne\u00fasporn\u011b) ulo\u017eena ve \u010dty\u0159ech za sebou jdouc\u00edch bitech. Do jednoho osmibitov\u00e9ho registru se pak vejdou takov\u00e9to BCD cifry dv\u011b. A aby to bylo \u00fapln\u011b jasn\u00e9, uvedu p\u0159\u00edklad. M\u00e1m ve zvolen\u00e9m\u00a0registru hodnotu C0h\u00a0a chci ji [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":337,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/393"}],"collection":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=393"}],"version-history":[{"count":4,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/393\/revisions"}],"predecessor-version":[{"id":452,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/393\/revisions\/452"}],"up":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/337"}],"wp:attachment":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}