Retrieving 32bit Multiply Result


Closed Thread
Results 1 to 40 of 43

Hybrid View

  1. #1
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    That makes things a bit easier ...
    Code:
    big_number  VAR WORD[2]   ; 32-bit variable 
    
    
    ASM  
    ;---[load a 32-bit constant into a 32-bit variable]-----------------
    MOVE?CN  macro Cin, Nout
        MOVE?CW  Cin & 0xFFFF, Nout     ; Low Word
        MOVE?CW  (Cin >> 16), Nout + 2  ; High Word
      endm
    ENDASM
    
    
    ;-------------------------------------------------------------------
    @  MOVE?CN  1000000, big_number
    
    WHILE (big_number[1] > 0) OR (big_number[0] > 0)
        Read record
        HSEROUT [record]
        
        big_number[0] = big_number[0] - 1
        IF big_number[0] = $ffff THEN big_number[1] = big_number[1] - 1
    WEND
    Last edited by Darrel Taylor; - 25th January 2008 at 10:09. Reason: Changed AND to OR
    DT

  2. #2


    Did you find this post helpful? Yes | No

    Default

    Thank you Darrel,
    I knew it can be done. I just did not know how, and your example turns few lights on in my brain.
    I will give it a shot after work, today, and post the results.
    Thanks again,

    Nick

  3. #3


    Did you find this post helpful? Yes | No

    Default

    Hi Darrel,

    I have a PBP copy installed on my work computer so I tried your code in a simple program to send out numbers (if I understood you correctly) from Big_number to 0.

    I am using:
    MCS 2.3.0.0
    PBP 2.47
    MPASM 5.03

    This is the small program I’m trying to compile but I get a warning and an error:

    INCLUDE "modedefs.bas"
    DEFINE OSC 16
    DEFINE LOADER_USED 1
    DEFINE HSER_RCSTA 90h
    DEFINE HSER_TXSTA 20h
    DEFINE HSER_BAUD 4800
    DEFINE HSER_CLROERR 1

    big_number VAR WORD[2] ; 32-bit variable

    ADCON1=6
    CMCON=7

    main:

    @ MOVE?CN 1000000, big_number
    WHILE (big_number[1] > 0) OR (big_number[0] > 0)
    HSEROUT [#big_number[1],#big_number[0]]
    big_number[0] = big_number[0] - 1
    IF big_number[0] = $ffff THEN big_number[1] = big_number[1] - 1
    WEND
    pause 5000
    goto main
    ASM
    ;---[load a 32-bit constant into a 32-bit variable]-----------------
    MOVE?CN macro Cin, Nout
    MOVE?CW Cin & 0xFFFF, Nout ; Low Word
    MOVE?CW (Cin >> 16), Nout + 2 ; High Word
    endm
    ENDASM
    End


    The messages I get are:

    Warning[207] c:\big_num.asm 99: Found label after column 1.(MOVE?CN)
    Error[108] c:\big_num.asm : Illegal character (1)

    Any idea?

    Regards,

    Nick

  4. #4
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Put the macro in the source code BEFORE the actual usage.

    INCLUDE "modedefs.bas"
    DEFINE OSC 16
    DEFINE LOADER_USED 1
    DEFINE HSER_RCSTA 90h
    DEFINE HSER_TXSTA 20h
    DEFINE HSER_BAUD 4800
    DEFINE HSER_CLROERR 1
    big_number VAR WORD[2] ; 32-bit variable
    ADCON1=6
    CMCON=7
    goto main
    ASM
    ;---[load a 32-bit constant into a 32-bit variable]-----------------
    MOVE?CN macro Cin, Nout
    MOVE?CW Cin & 0xFFFF, Nout ; Low Word
    MOVE?CW (Cin >> 16), Nout + 2 ; High Word
    endm
    ENDASM
    main:
    @ MOVE?CN 1000000, big_number
    WHILE (big_number[1] > 0) OR (big_number[0] > 0)
    HSEROUT [#big_number[1],#big_number[0]]
    big_number[0] = big_number[0] - 1
    IF big_number[0] = $ffff THEN big_number[1] = big_number[1] - 1
    WEND
    pause 5000
    goto main
    End
    [/code]

  5. #5


    Did you find this post helpful? Yes | No

    Default

    Hi Skimask,

    I tried that first but I got 12 errors:

    Error[113] c:\pbp\pbppicbasic14.lib428 : Symbol not previously defined (big_number).
    Should I do any changes in pbppicbasic14.lib?
    Thanks,

    Nick

  6. #6
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    edit this line
    Code:
    @ MOVE?CN 1000000, big_number
    to
    Code:
    @ MOVE?CN 1000000, _big_number
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  7. #7
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    OOps!

    Thanks Steve.
    DT

Similar Threads

  1. Strugling without floating point
    By pjsmith in forum mel PIC BASIC Pro
    Replies: 15
    Last Post: - 27th March 2011, 07:29
  2. Math help please!!!
    By jbirnsch in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 10th August 2007, 15:45
  3. 32-bit Variables and DIV32, Hourmeter 99999.9
    By Darrel Taylor in forum Code Examples
    Replies: 9
    Last Post: - 23rd November 2006, 08:23
  4. PBP 16-bit ADC result math
    By sonic in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 13th March 2005, 15:21
  5. Retrieving Div32 Remainder
    By Darrel Taylor in forum Code Examples
    Replies: 4
    Last Post: - 20th August 2003, 04:53

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts