<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>8-bit MicrocontrollersのトピックUrgently needed - 40 bit / 16 bit in 8 bit MCU (HCS08)</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Urgently-needed-40-bit-16-bit-in-8-bit-MCU-HCS08/m-p/182559#M13423</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I urgently need routine for 40 bit / 16 bit in 8 bit MCU. Fully unsigned operation.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Routine needs to be optimized for speed. Any - C or assembly - is ok.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;CodeWarrior does not support a number more than 32 bit for 8 bit MCU.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks in advance.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;RParekh&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 28 Aug 2008 21:28:06 GMT</pubDate>
    <dc:creator>rparekh</dc:creator>
    <dc:date>2008-08-28T21:28:06Z</dc:date>
    <item>
      <title>Urgently needed - 40 bit / 16 bit in 8 bit MCU (HCS08)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Urgently-needed-40-bit-16-bit-in-8-bit-MCU-HCS08/m-p/182559#M13423</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I urgently need routine for 40 bit / 16 bit in 8 bit MCU. Fully unsigned operation.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Routine needs to be optimized for speed. Any - C or assembly - is ok.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;CodeWarrior does not support a number more than 32 bit for 8 bit MCU.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks in advance.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;RParekh&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Aug 2008 21:28:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Urgently-needed-40-bit-16-bit-in-8-bit-MCU-HCS08/m-p/182559#M13423</guid>
      <dc:creator>rparekh</dc:creator>
      <dc:date>2008-08-28T21:28:06Z</dc:date>
    </item>
    <item>
      <title>Re: Urgently needed - 40 bit / 16 bit in 8 bit MCU (HCS08)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Urgently-needed-40-bit-16-bit-in-8-bit-MCU-HCS08/m-p/182560#M13424</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;Hello,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;It is possible to consider a 40-bit value as a sequence of three word values (48 bits), perhaps expressed as a 3-element array (big endian format assumed).&amp;nbsp; It is then possible to implement a "long division" process, in three stages, where the remainder from each stage&amp;nbsp;is carried through to the next stage.&amp;nbsp; However, the process will be&amp;nbsp;slow.&amp;nbsp; The following test code demonstrates this process.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;// Global variables:&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;word invalue[3] = {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; 0x00FE, 0xDCBA, 0x9876&lt;BR /&gt;};&lt;BR /&gt;word outvalue[3];&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;/********************************************/&lt;BR /&gt;/* Divide function 48-bit/16-bit unsigned */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;void divide48( word divisor)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; dword temp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (divisor == 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outvalue[0] = 0xFFFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outvalue[1] = 0xFFFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outvalue[2] = 0xFFFF;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; temp = invalue[0];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; outvalue[0] = temp / divisor;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; temp = (temp % divisor) * 0x10000 + invalue[1];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; outvalue[1] = temp / divisor;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; temp = (temp % divisor) * 0x10000 + invalue[2];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; outvalue[2] = temp / divisor;&lt;BR /&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The process may be sped up somewhat if the remainder is explicitly calculated, and avoiding use of the % operator, but is still relatively slow.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;void divide48( word divisor)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; dword temp;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp; word rem;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (divisor == 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outvalue[0] = 0xFFFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outvalue[1] = 0xFFFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outvalue[2] = 0xFFFF;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp; temp = invalue[0];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; outvalue[0] = temp / divisor;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; rem = temp - (outvalue[0] * divisor);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; temp = (rem * 0x10000) + invalue[1];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; outvalue[1] = temp / divisor;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; rem = temp - (outvalue[1] * divisor);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; temp = (rem * 0x10000) + invalue[2];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; outvalue[2] = temp / divisor;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;}&lt;BR /&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;For the special case, with the dividend value limited to 40 bits, and with a minimum allowable divisor value of 256, the result should not exceed 32-bits.&amp;nbsp; This might give the following simplification.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;dword&amp;nbsp;divide48( word divisor)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; dword temp;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp; word rem;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp; word outval[2];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (divisor&amp;nbsp;&amp;lt; 256)&lt;BR /&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0xFFFFFFFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp; temp = (invalue[0] * 0x10000) + invalue[1];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; outval[0] = temp / divisor;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; rem = temp - (outvalue[0] * divisor);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; temp = (rem * 0x10000) + invalue[2];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; outval[1] = temp / divisor;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp; return ((outval[0] * 0x10000) + outval[1]);&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;}&lt;BR /&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;Mac&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Aug 2008 10:52:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Urgently-needed-40-bit-16-bit-in-8-bit-MCU-HCS08/m-p/182560#M13424</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2008-08-29T10:52:56Z</dc:date>
    </item>
    <item>
      <title>Re: Urgently needed - 40 bit / 16 bit in 8 bit MCU (HCS08)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Urgently-needed-40-bit-16-bit-in-8-bit-MCU-HCS08/m-p/182561#M13425</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks a lot.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;It is working.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;But it is taking too much of time.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Any tip to optimize the same.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I need to finish this task in 200 usec @ 20 MHz bus speed in S08 MCU.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;RParekh&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Aug 2008 16:11:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Urgently-needed-40-bit-16-bit-in-8-bit-MCU-HCS08/m-p/182561#M13425</guid>
      <dc:creator>rparekh</dc:creator>
      <dc:date>2008-08-29T16:11:54Z</dc:date>
    </item>
    <item>
      <title>Re: Urgently needed - 40 bit / 16 bit in 8 bit MCU (HCS08)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Urgently-needed-40-bit-16-bit-in-8-bit-MCU-HCS08/m-p/182562#M13426</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;DIV&gt;Hello RP,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;So you have a maximum of 4000 cycles to implement the division process.&amp;nbsp; I have attempted a standard division algorithm (related to the "restoring division algorithm", without the need for restoral).&amp;nbsp; The basic function code&amp;nbsp;shown below seems to work correctly.&amp;nbsp; The dividend and the result use the same global 5-byte&amp;nbsp;array variable&amp;nbsp;&lt;FONT face="Courier New"&gt;quotient&lt;/FONT&gt;.&amp;nbsp; Another global word variable is used for the &lt;FONT face="Courier New"&gt;remainder&lt;/FONT&gt; associated with the calculation.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;// Global variables:&lt;BR /&gt;byte quotient[5] = {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; 0xFE, 0xDC, 0xBA, 0x98, 0x76&amp;nbsp; // Dividend value&lt;BR /&gt;};&lt;BR /&gt;word remainder;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;void divide40( word divisor)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; byte i;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp; if (divisor == 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[0] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[1] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[2] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[3] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[4] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; remainder = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; 40; i++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __asm {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldhx @quotient&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lsl&amp;nbsp; 4,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; 3,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; 2,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; 1,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; ,x&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldhx @remainder&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; 1,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; ,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (remainder &amp;gt; divisor) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; remainder -= divisor;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[4] |= 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;The number of cycles required for execution will depend on the number of 1's in the calculated quotient.&amp;nbsp; For the HCS08, the formula is 2719 + 33*N cycles, where N is the number of 1's.&amp;nbsp; This could be borderline to your limit of 4000 cycles.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;If we now assume that the divisor value is never less than 256, so that the result can never exceed 32 bits length, it is possible to reduce the number of processing loops from 40 down to 32, with subsequent fewer cycles.&amp;nbsp; The modified code follows.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;void divide40( word divisor)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; byte i;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp; if (divisor &amp;lt; 256) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[0] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[1] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[2] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[3] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[4] = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; remainder = (word)quotient[0];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; quotient[0] = quotient[1];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; quotient[1] = quotient[2];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; quotient[2] = quotient[3];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; quotient[3] = quotient[4];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; quotient[4] = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; 32; i++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __asm {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldhx @quotient&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lsl&amp;nbsp; 4,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; 3,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; 2,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; 1,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; ,x&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldhx @remainder&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; 1,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rol&amp;nbsp; ,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (remainder &amp;gt; divisor) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; remainder -= divisor;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotient[4] |= 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;For this version, the formula is&amp;nbsp;2217 + N*33 cycles, a saving of about 500 cycles.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Neither functions include the loading of the dividend value into the &lt;FONT face="Courier New"&gt;quotient&lt;/FONT&gt; array, that will require some additional cycles.&amp;nbsp; With the second version, a few cycles could be saved if the &lt;FONT face="Courier New"&gt;remainder&lt;/FONT&gt; and &lt;FONT face="Courier New"&gt;quotient&lt;/FONT&gt; variables can be preloaded, to already incorporate the 8-bit shift.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;A very&amp;nbsp;brief description of the division algorithms is contained in the document attached.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;Mac&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Sep 2008 18:42:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Urgently-needed-40-bit-16-bit-in-8-bit-MCU-HCS08/m-p/182562#M13426</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2008-09-01T18:42:30Z</dc:date>
    </item>
  </channel>
</rss>

