<?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>topic Re: HC08 16bit Subtraction in 8-bit Microcontrollers</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC08-16bit-Subtraction/m-p/169427#M11227</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi Ross,&lt;BR /&gt;&lt;BR /&gt;The CLC is not required!&lt;BR /&gt;SUB does not use the carry only sets/clears due to the result&lt;BR /&gt;SBC uses the carry in the operation and sets/clears it due to the result.&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 03 Dec 2007 10:06:36 GMT</pubDate>
    <dc:creator>peg</dc:creator>
    <dc:date>2007-12-03T10:06:36Z</dc:date>
    <item>
      <title>HC08 16bit Subtraction</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC08-16bit-Subtraction/m-p/169423#M11223</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi all,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Can anybody please provide&amp;nbsp;post some&amp;nbsp;assembler code to subtract an IMM 16bit value from a 16bit value in RAM. Given that the SUB #xx command is limited to an 8bit immediate value I'm not sure how to do this.&lt;/DIV&gt;&lt;DIV&gt;Is it a matter of using say the SP and H,X to perform the operation?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I need to be able to handle two possibilites:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;RAM Var = $8000&lt;/DIV&gt;&lt;DIV&gt;IMM Val = $2000&lt;/DIV&gt;&lt;DIV&gt;$8000 - $2000 = $6000&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The&amp;nbsp;another scenario is where the RAM value is less than the IMM value...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;RAM Var = $2000&lt;/DIV&gt;&lt;DIV&gt;IMM Val = $3000&lt;/DIV&gt;&lt;DIV&gt;$2000 - $3000 = $F000&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;BR /&gt;Ross&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 02 Dec 2007 19:12:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/HC08-16bit-Subtraction/m-p/169423#M11223</guid>
      <dc:creator>Bloodhound</dc:creator>
      <dc:date>2007-12-02T19:12:39Z</dc:date>
    </item>
    <item>
      <title>Re: HC08 16bit Subtraction</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC08-16bit-Subtraction/m-p/169424#M11224</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;Hi,&lt;BR /&gt;&lt;BR /&gt;You just do it a byte at a time using SUB for the low byte first and then SBC for the higher bytes.&lt;BR /&gt;The examples you chose are not good as they don't produce a carry from the lower byte.&lt;BR /&gt;&lt;BR /&gt;if RAMVar = $2000&lt;BR /&gt;&lt;BR /&gt;LDA RAMVar+1&lt;BR /&gt;SUB #$00&lt;BR /&gt;STA RESULT+1&lt;BR /&gt;LDA RAMVar&lt;BR /&gt;SBC #$30&lt;BR /&gt;STA RESULT&lt;BR /&gt;&lt;BR /&gt;now&lt;BR /&gt;RESULT = $F000&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;OR to better demonstrate carry:&lt;BR /&gt;&lt;BR /&gt;if RAMVar = $2000&lt;BR /&gt;&lt;BR /&gt;LDA RAMVar+1&lt;BR /&gt;SUB #$01&lt;BR /&gt;STA RESULT+1&lt;BR /&gt;LDA RAMVar&lt;BR /&gt;SBC #$30&lt;BR /&gt;STA RESULT&lt;BR /&gt;&lt;BR /&gt;now&lt;BR /&gt;RESULT = $EFFF&lt;BR /&gt;&lt;SPAN class="time_text"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by peg on &lt;SPAN class="date_text"&gt;2007-12-02&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;10:44 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 02 Dec 2007 19:32:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/HC08-16bit-Subtraction/m-p/169424#M11224</guid>
      <dc:creator>peg</dc:creator>
      <dc:date>2007-12-02T19:32:57Z</dc:date>
    </item>
    <item>
      <title>Re: HC08 16bit Subtraction</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC08-16bit-Subtraction/m-p/169425#M11225</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Ross,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;For assembly programming,&amp;nbsp;the code will often be easier to follow if constants are represented by a label, as a result of using an equate directive.&amp;nbsp; The following code snippet extends the process described by Peg, when a label is used.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;IMM_VAL&amp;nbsp; equ&amp;nbsp; 8192&amp;nbsp; ; Could be binary, decimal or hex representation&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp; RAMvar+1&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp; #(IMM_VAL%256)&amp;nbsp; ; Low byte value&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta&amp;nbsp; RESULT+1&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp; RAMvar&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sbc&amp;nbsp; #(IMM_VAL/256)&amp;nbsp; ; High byte value&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta&amp;nbsp; RESULT&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;This method should work with most assemblers.&amp;nbsp; Some assemblers have directives to select the low byte or high byte of a word value, and these could alternatively be used.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by bigmac on &lt;SPAN class="date_text"&gt;2007-12-03&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;01:23 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 02 Dec 2007 22:21:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/HC08-16bit-Subtraction/m-p/169425#M11225</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2007-12-02T22:21:57Z</dc:date>
    </item>
    <item>
      <title>Re: HC08 16bit Subtraction</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC08-16bit-Subtraction/m-p/169426#M11226</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Thanks guys, that worked well, though, for those reading this in the future, remember to put a CLC command before the first sub....might save some head scratching.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Cheers,&lt;/DIV&gt;&lt;DIV&gt;Ross&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 03 Dec 2007 09:58:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/HC08-16bit-Subtraction/m-p/169426#M11226</guid>
      <dc:creator>Bloodhound</dc:creator>
      <dc:date>2007-12-03T09:58:08Z</dc:date>
    </item>
    <item>
      <title>Re: HC08 16bit Subtraction</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC08-16bit-Subtraction/m-p/169427#M11227</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi Ross,&lt;BR /&gt;&lt;BR /&gt;The CLC is not required!&lt;BR /&gt;SUB does not use the carry only sets/clears due to the result&lt;BR /&gt;SBC uses the carry in the operation and sets/clears it due to the result.&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 03 Dec 2007 10:06:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/HC08-16bit-Subtraction/m-p/169427#M11227</guid>
      <dc:creator>peg</dc:creator>
      <dc:date>2007-12-03T10:06:36Z</dc:date>
    </item>
  </channel>
</rss>

