Pigmeo was a compiler and framework for writing microcontroller firmware in C# and other .NET languages, developed by Adrián Bulnes (Urriellu) between 2007 and 2010. This is a frozen, read-only archive of the project’s website, pigmeo.org; nothing here is maintained. Source code: github.com/Urriellu/pigmeo · Original capture: Wayback Machine · urriellu.net

CCS PCM Output 004 - Multiply two UInt8

From Pigmeo Development Wiki

C language

#include <16F716.h>
 
unsigned int8 A;
unsigned int8 B;
unsigned int8 C;
 
void main() {
	C=A*B;
}

Assembly language

               ROM used: 57 words (3%)
                         Largest free fragment is 1991
               RAM used: 8 (6%) at main() level
                         10 (8%) worst case
               Stack:    1 locations
 
0000 3000       00001 MOVLW  00
0001 008A       00002 MOVWF  0A
0002 2829       00003 GOTO   029
0003 0000       00004 NOP
0000            00005 .................... #include <16F716.h> 
0000            00006 .................... //////// Standard Header file for the PIC16F716 device //////////////// 
0000            00007 .................... #device PIC16F716 
0000            00261 .................... #list 
0000            00262 ....................  
0000            00263 ....................  
0000            00264 .................... unsigned int8 A; 
0000            00265 .................... unsigned int8 B; 
0000            00266 .................... unsigned int8 C; 
0000            00267 ....................  
0000            00268 .................... void main() { 
0029 0184       00269 CLRF   04
002A 301F       00270 MOVLW  1F
002B 0583       00271 ANDWF  03,F
002C 1683       00272 BSF    03.5
002D 141F       00273 BSF    1F.0
002E 149F       00274 BSF    1F.1
002F 151F       00275 BSF    1F.2
0000            00276 .................... 	C=A*B; 
0030 1283       00277 BCF    03.5
0031 0825       00278 MOVF   25,W  ;load A onto stack
0032 00A8       00279 MOVWF  28
0033 0826       00280 MOVF   26,W  ;load B onto stack
0034 00A9       00281 MOVWF  29
0035 2804       00282 GOTO   004  ;call multiplication macro
0036 0821       00283 MOVF   21,W ;copy _RETURN_ to C
0037 00A7       00284 MOVWF  27
0000            00285 .................... } 
0038 0063       0286 SLEEP
 
Configuration Fuses:
   Word  1: 3FF3   RC NOWDT PUT NOPROTECT BORV40 BROWNOUT
 
SYMBOL TABLE
  LABEL                             VALUE
 
CCP_1                             00000015
CCP_1_LOW                         00000015
CCP_1_HIGH                        00000016
_RETURN_                          00000021
A                                 00000025
B                                 00000026
C                                 00000027
main                              00000029
1:                 //////// Standard Header file for the PIC16F716 device ////////////////
2:                 #device PIC16F716
   004    01A0     CLRF 0x20
   005    01A1     CLRF 0x21
   006    0828     MOVF 0x28, W
   007    1003     BCF 0x3, 0
   008    1829     BTFSC 0x29, 0
   009    07A0     ADDWF 0x20, F
   00A    0CA0     RRF 0x20, F
   00B    0CA1     RRF 0x21, F
   00C    18A9     BTFSC 0x29, 0x1
   00D    07A0     ADDWF 0x20, F
   00E    0CA0     RRF 0x20, F
   00F    0CA1     RRF 0x21, F
   010    1929     BTFSC 0x29, 0x2
   011    07A0     ADDWF 0x20, F
   012    0CA0     RRF 0x20, F
   013    0CA1     RRF 0x21, F
   014    19A9     BTFSC 0x29, 0x3
   015    07A0     ADDWF 0x20, F
   016    0CA0     RRF 0x20, F
   017    0CA1     RRF 0x21, F
   018    1A29     BTFSC 0x29, 0x4
   019    07A0     ADDWF 0x20, F
   01A    0CA0     RRF 0x20, F
   01B    0CA1     RRF 0x21, F
   01C    1AA9     BTFSC 0x29, 0x5
   01D    07A0     ADDWF 0x20, F
   01E    0CA0     RRF 0x20, F
   01F    0CA1     RRF 0x21, F
   020    1B29     BTFSC 0x29, 0x6
   021    07A0     ADDWF 0x20, F
   022    0CA0     RRF 0x20, F
   023    0CA1     RRF 0x21, F
   024    1BA9     BTFSC 0x29, 0x7
   025    07A0     ADDWF 0x20, F
   026    0CA0     RRF 0x20, F
   027    0CA1     RRF 0x21, F
   028    2836     GOTO 0x36
---  C:\...\sample.c
1:                 #include <16F716.h>
   000    3000     MOVLW 0
   001    008A     MOVWF 0xa
   002    2829     GOTO 0x29
   003    0000     NOP
2:                 
3:                 unsigned int8 A;
4:                 unsigned int8 B;
5:                 unsigned int8 C;
6:                 
7:                 void main() {
   029    0184     CLRF 0x4
   02A    301F     MOVLW 0x1f
   02B    0583     ANDWF 0x3, F
   02C    1683     BSF 0x3, 0x5
   02D    141F     BSF 0x1f, 0
   02E    149F     BSF 0x1f, 0x1
   02F    151F     BSF 0x1f, 0x2
8:                 	C=A*B;
   030    1283     BCF 0x3, 0x5
   031    0825     MOVF 0x25, W
   032    00A8     MOVWF 0x28
   033    0826     MOVF 0x26, W
   034    00A9     MOVWF 0x29
   035    2804     GOTO 0x4
   036    0821     MOVF 0x21, W
   037    00A7     MOVWF 0x27
   038    0063     SLEEP