Prior to Prior to v5.50, the MPASM header file name of few devices were in uppercase and most of them were in lowercase. On case in-sensitive OS like Windows, this was not a matter of concern. On case sensitive OS like those based on Linux, the user had to take care of matching the case of the filename used in their #include statement to that of the actual filename.
In order to maintain uniformity and avoid confusion, starting from v5.50,the names of all MPASM header file (.inc) would be in lowercase. As a consequence, assembly source files with uppercase filenames in #include statement might fail to assemble. There are two possible ways to fix this:
The recommended method is to change the filename of .inc file in the #include statement to lowercase. If the user does not wish to do this, then they can work around the issue by creating a symbolic link to the new lowercase filename from the uppercase filename. A shell script called createbackcompatiblelinks has been provided in mpasmx folder on Linux to do the same. Depending on where the user's mpasmx folder is located, root or super-user privilege might be required.
Due to the various limitations of COD format, versions 5.3 and above of MPASM do not generate COD format as the output of an absolute assembly file. COFF format replaces COD format in all cases. This should not affect ordinary users because COD format was only used by MPLAB IDE versions prior to v8.20 to display debug information. MPLAB IDE v8.20 and later recognize the COFF output of MPASM in absolute mode, and this transition should not impose noticeable change in the expected behavior of the language tool suite.
Also due to the elimination of the COD Format from MPASM ouput, and the use of COFF format instead, new flags have been added to COFF files that are generated by C18 v3.30 and MPASM v5.30. These flags are only recognized by MPLINK v4.30 and above. MPLINK v4.30 and above continue to recognize the old COFF files. However, earlier versions of MPLINK may not recognize new COFF files.
The default behavior of MPLINK does not allow defining code or data in memory address locations outside the boundaries of linker script regions. Existing projects in absolute mode that use these address spaces will encounter a linker error indicating that section '.org_xx' can not fit the absolute section. The workaround for this error is to add a new region to the default linker script to define the user defined addresses for the linker. For more information, see the MPLINK User's Guide. The default linker script is located at the LKR directory at the same location where the mplink.exe executable exists.
For example, if you see the following error message in the output window of your MPLAB IDE when building your Absolute assembly project:
Executing: "C:\MCC18\bin\mplink.exe" /p18F8527 "test.o" /z__MPLAB_BUILD=1 /o"test.cof" /M"test.map" /W /x MPLINK 4.30, Linker Copyright (c) 2009 Microchip Technology Inc. Error - section '.org_6' can not fit the absolute section. Section '.org_6' start=0x0000c020, length=0x00000006
open the file "C:\MCC18\bin\LKR\18f8527_g.lkr" in a text editor and add the line:
CODEPAGE NAME=unimplemented START=0xC000 END=0x1FFFFF PROTECTEDat line 32 after #FI and before the idlocs region.
This problem only applicable since MPLINK v4.30.
Due to a change in COFF file format, MPASM Assembler v5.00 and later will not be compatible with versions of MPLINK Linker prior to v4.00 or versions of the MPLAB IDE prior to v7.21.
MPASM Assembler v5.00 and later will have backward compatibility to earlier versions at the source level only. Any existing object files or libraries compiled with earlier versions of the tools will not link using new versions of the tools. They will need to be recompiled from source.
If the user attempts to use this release with object files or libraries compiled with earlier versions of MPLAB C18, MPLINK Linker, and MPASM Assembler, the error message that will be received will be similar to:
Error - Coff file format for 'C:\mcc18\lib/c018i.o' is out of date.
If the user attempts to use an old version of MPLINK Linker to link
object files or libraries compiled with this release, the error message
that will be received will be similar to:
Error - Coff file format for 'C:\mcc18\lib/c018i.o' does not appear to be a valid COFF file.
MCV201B MCV202B MCV282B MCV283B 10F200 10F202 10F204 MCV442B 10F206 10F220 10F222 MCV443B 10F320 10F322 10LF320 10LF322 12C508 12C508A 12C509 12C509A 12C671 12C672 12CE518 12CE519 12CE673 12CE674 12CR509A 12F1501 12F1822 12F1840 12F508 12F509 12F510 12F519 12F520 12F529T39A 12F529T48A 12F609 12F615 12F617 12F629 12F635 12F675 12F683 12F752 12F1571* 12F1572* 12HV609 12HV615 12HV752 12LF1501 12LF1552 12LF1822 12LF1840 12LF1840T39A 12LF1840T48A 12LF1571* 12LF1572* 14000 16C432 16C433 16C505 16C52 16C54 16C54A 16C54B 16C54C 16C55 16C554 16C557 16C558 16C55A 16C56 16C56A 16C57 16C57C 16C58A 16C58B 16C5X 16C61 16C62 16C620 16C620A 16C621 16C621A 16C622 16C622A 16C62A 16C62B 16C63 16C63A 16C64 16C642 16C64A 16C65 16C65A 16C65B 16C66 16C662 16C67 16C71 16C710 16C711 16C712 16C715 16C716 16C717 16C72 16C72A 16C73 16C73A 16C73B 16C74 16C745 16C74A 16C74B 16C76 16C765 16C77 16C770 16C771 16C773 16C774 16C781 16C782 16C84 16C923 16C924 16C925 16C926 16CE623 16CE624 16CE625 16CR54 16CR54A 16CR54B 16CR54C 16CR56A 16CR57A 16CR57B 16CR57C 16CR58A 16CR58B 16CR62 16CR620A 16CR63 16CR64 16CR65 16CR72 16CR83 16CR84 16CXX 16F1454 16F1455 16F1459 16F1503 16F1507 16F1508 16F1509 16F1512 16F1513 16F1516 16F1517 16F1518 16F1519 16F1526 15F1527 16F1782 16F1783 16F1784 16F1786 16F1787 16F1788 16F1789 16F1703* 16F1704 16F1705* 16F1707* 16F1708 16F1709* 16F1713 16F1716 16F1823 16F1824 16F1825 16F1826 16F1827 16F1828 16F1829 16F1847 16F1933 16F1829LIN 16F1934 16F1936 16F1937 16F1938 16F1939 16F1946 16F1947 16F505 16F506 16F526 16F54 16F57 16F570 16F59 16F610 16F616 16F627 16F627A 16F628 16F628A 16F630 16F631 16F636 16F639 16F648A 16F676 16F677 16F684 16F685 16F687 16F688 16F689 16F690 16F707 16F716 16F72 16F720 16F721 16F722 16F722A 16F723 16F723A 16F724 16F726 16F727 16F73 16F737 16F74 16F747 16F753 16F76 16F767 16F77 16F777 16F785 16F818 16F819 16F83 16F84 16F84A 16F87 16F870 16F871 16F872 16F873 16F873A 16F874 16F874A 16F876 16F876A 16F877 16F877A 16F88 16F882 16F883 16F884 16F886 16F887 16F913 16F914 16F916 16F917 16F946 16LF1454 16LF1455 16LF1459 16LF1503 16LF1507 16LF1508 16LF1509 16LF1512 16LF1513 16LF1516 16LF1517 16LF1518 16LF1519 16LF1526 16LF1527 16LF1703* 16LF1704 16LF1705* 16LF1707* 16LF1708 16LF1709* 16LF1713 16LF1716 16LF1782 16LF1783 16LF1784 16LF1786 16LF1787 16LF1788 16LF1789 16LF1823 16LF1824 16LF1824T39A 16LF1825 16LF1826 16LF1827 16LF1828 16LF1829 16LF1847 16LF1902 16LF1903 16LF1904 16LF1906 16LF1907 16LF1933 16LF1934 16LF1936 16LF1937 16LF1938 16LF1939 16LF1946 16LF1947 16LF707 16LF720 16LF721 16LF722 16LF722A 16LF723 16LF724 16LF726 16LF727 16HV540 16HV610 16HV616 16HV753 16HV785 17C42 17C42A 17C43 17C44 17C752 17C756 17C756A 17C762 17C766 17CR42 17CR43 17CXX 18C242 18C252 18C442 18C452 18C601 18C658 18C801 18C858 18F1220 18F1230 18F1320 18F1330 18F13K22 18F13K50 18F14K22 18F14K22LIN 18F14K50 18F2220 18F2221 18F2320 18F2321 18F2331 18F23K20 18F23K22 18F2410 18F242 18F2420 18F2423 18F2431 18F2439 18F2450 18F2455 18F2458 18F248 18F2480 18F24J10 18F24J11 18F24J50 18F24K20 18F24K22 18F24K50 18F2510 18F2515 18F252 18F2520 18F2523 18F2525 18F2539 18F2550 18F2553 18F258 18F2580 18F2585 18F25J10 18F25J11 18F25J50 18F25K20 18F25K22 18F25K50 18F25K80 18F2610 18F2620 18F2680 18F2682 18F2685 18F26J11 18F26J13 18F26J50 18F26J53 18F26K20 18F26K22 18F26K80 18F27J13 18F27J53 18F4220 18F4221 18F4320 18F4321 18F43K20 18F4331 18F43K22 18F4410 18F442 18F4420 18F4423 18F4431 18F4439 18F4450 18F4455 18F4458 18F448 18F4480 18F44J10 18F44J11 18F44J50 18F44K20 18F44K22 18F4510 18F4515 18F452 18F4520 18F4523 18F4525 18F4539 18F4550 18F4553 18F458 18F4580 18F4585 18F45J10 18F45J11 18F45J50 18F45K20 18F45K22 18F45K50 18F45K80 18F4610 18F4620 18F4680 18F4682 18F4685 18F46J11 18F46J13 18F46J50 18F46J53 18F46K20 18F46K22 18F46K80 18F47J13 18F47J53 18F6310 18F6390 18F6393 18F63J11 18F63J90 18F6410 18F6490 18F6493 18F64J11 18F64J90 18F6520 18F6525 18F6527 18F6585 18F65J10 18F65J11 18F65J15 18F65J50 18F65J90 18F65J94 18F65K22 18F65K80 18F65K90 18F6620 18F6621 18F6622 18F6627 18F6628 18F6680 18F66J10 18F66J11 18F66J15 18F66J16 18F66J50 18F66J55 18F66J60 18F66J65 18F66J90 18F66J93 18F66J94 18F66J99 18F66K22 18F66K80 18F66K90 18F6720 18F6722 18F6723 18F67J10 18F67J11 18F67J50 18F67J60 18F67J90 18F67J93 18F67J94 18F67K22 18F67K90 18F8310 18F8390 18F8393 18F83J11 18F83J90 18F8410 18F8490 18F8493 18F84J11 18F84J90 18F8520 18F8525 18F8527 18F8585 18F85J10 18F85J11 18F85J15 18F85J50 18F85J90 18F85J94 18F85K22 18F85K90 18F8620 18F8621 18F8622 18F8627 18F8628 18F8680 18F86J10 18F86J11 18F86J15 18F86J16 18F86J50 18F86J55 18F86J60 18F86J65 18F86J72 18F86J90 18F86J93 18F86J94 18F86J99 18F86K22 18F86K90 18F8720 18F8722 18F8723 18F87J10 18F87J11 18F87J50 18F87J60 18F87J72 18F87J90 18F87J93 18F87J94 18F87K22 18F87K90 18F95J94 18F96J60 18F96J65 18F96J94 18F96J99 18F97J60 18F97J94 18LF13K22 18LF13K50 18LF14K22 18LF14K50 18LF23K22 18LF24J10 18LF24J11 18LF24J50 18LF24K22 18LF24K50 18LF25J10 18LF25J11 18LF25J50 18LF25K22 18LF25K50 18LF25K80 18LF26J11 18LF26J13 18LF26J50 18LF26J53 18LF26K22 18LF26K80 18LF27J13 18LF27J53 18LF43K22 18LF44J10 18LF44J11 18LF44J50 18LF44K22 18LF45J10 18LF45J11 18LF45J50 18LF45K22 18LF45K50 18LF45K80 18LF46J11 18LF46J13 18LF46J50 18LF46J53 18LF46K22 18LF46K80 18LF47J13 18LF47J53 18LF65K80 18LF66K80 EEPROM16 EEPROM8 MCP19110 MCP19111 MCP19114 MCP19115 MCP25020 MCP25025 MCP25050 MCP25055 MCV08A MCV14A MCV18A MCV18E MCV20USB MCV28A RF509AF RF509AG RF675F RF675H RF675K
*Note: Early adopter support has been added for these devices since last release
THE PARTS CORRESPONDING TO THESE OPTIONS MAY NOT ALL BE COMMERCIALLY AVAILABLE.
These can be chosen through the introductory screen, on the command line, or in source file.
NOTES:16C52 16C54 16CR54 16C54A 16CR54A 16C54B 16CR54B 16C54C 16CR54C 16C55 16C55A 16C56 16C56A 16CR56A 16C57 16CR57A 16CR57B 16C57C 16CR57C 16C58A 16CR58A 16C58B 16CR58B
16F54 16F57 16F59
MPASMWIN.EXE is the 32-bit Windows version of MPASM Assembler which is distributed with MPLAB IDE and MPLAB C18. It is supported on the following platforms (32- and 64-bit):
MPASMX.EXE is the 32-bit version of MPASM Assembler which is distributed with MPLAB X IDE. It is supported on the following platforms (32- and 64-bit):
'Instruction is not supported on this device'For example, PAGESELW is not supported on PIC16 extended.
'STATUS register has no IRP or RP1 or RP0 bits'
The following is a list of known problems. For a list of limitations, please see MPASM Assembler Help, Troubleshooting, Assembler Limitations.
LIST P=18F452 MOVWF 0x1000 ENDwill assemble without warning.
U1 IDATA X DB 1 U2 IDATA X DB 2 CODE MOVWF Xassembles quietly, but the definition of X which is used in the MOVWF instruction is not well defined.
UDATA 0x124 X RES 1 CODE 0x100 DT Xwill generate 0x0124 at address 0x100 instead of 0x3424 (RETLW 0x24).
#define F(X,Y) X + Y Y EQU 2 movlw F(Y,1)will yield movlw 2 instead of movlw 3. After Y is substituted in place of X, it is replaced itself by the second argument upon rescanning.
bsf ,1 ENDThis assembles as if "bsf 0,1" was given.
code 0 bra start startscn code 0x100 start nop goto $-1 bra $ endcausing a link-time error:
Error - file 'C:\test\mpasm\gotoneg1.o', section 'startscn', Symbol '_startscn_0102' is not word-aligned.
It can not be used as the target of a call or goto instruction.
org 0 bra start org 0x100 start nop goto $-1 bra $ end
Warning[226] C:\TEST\MPASM\GOTONEG1.ASM 8 : Destination address must be word aligned
RM MACRO Name,Size LOCAL i =0 Name RES 0 GLOBAL Name WHILE i <Size Name#v(i) RES 1 i +=1 ENDW ENDM myuscn UDATA RM hello,myconstsz ; Should cause an assembly error myconstsz equ 2 CODE lfsr 0,hello0 ENDAssembly of this code causes only a warning, but MPLINK Linker gives an error message "reloc[0] has an invalid r_symndx." while trying to link the COFF file.
myconstsz equ 2 RM hello, myconstsz
IF (CONST) ; no ENDIFMPASM Assembler assembles it and gives no error, only a warning.
File not found.Any resulting intermediate or output files will not include the portion of the file name after the first '.' For example, the file name above may cause files named foo.ERR, foo.COD, or foo.LST to be created.
To invoke the assembler from the command line, execute either:
mpasmwin (MPLAB IDE)
or
mpasmx (MPLAB X IDE)
On a Windows system, you will then be given a GUI interface window. Help on using the interface is provided on-line. The assembler can also be invoked with parameters or through drag-and-drop. In these cases, the interface screen is not displayed and assembly begins immediately.
On a Linux or Mac system (MPASMX only), no GUI screen is displayed, but a list of command-line options is presented.
Correct any syntax problems, referring to the MPASM Assembler, MPLINK Object Linker, MPLIB Object Librarian User's Guide (DS33014) for syntax help. MPASM Assembler assembles with INHX32 as the default hex output, and generates a listing file, error file, and .COD file.
Serial EEPROM Support:
Two "processor" selections are provided to generate byte data - EEPROM8 and EEPROM16. Both generate data in terms of bytes, but EEPROM8 considers a "word" to be 8 bits wide, while EEPROM16 considers a "word" to be 16 bits wide. The "program counter" is always incremented in terms of bytes.
The default size for memory products is 128 bytes. This can be overridden by using the LIST M=<max address> directive. Note that <max address> is always evaluated as a decimal number. The header file MEMORY.INC is provided to define the maximum address for available memory devices. The format of the defined symbols is _<device>; for example, to set the maximum memory size for a 24LCS21, use the directive LIST M=_24LCS21.
The following data generation directives are supported for memory products:
DW FILL ORGThe behavior of other data generation directives is not guaranteed. All other directives are unchanged.
An example of generating a file for programming a memory device is as follows:
;************************************************* ; Generate data for a 8-bit wide memory device. LIST P=EEPROM8, R=DECIMAL INCLUDE "MEMORY.INC" LIST M=_24LCS21 #DEFINE MAX_VALUE 255 ORG 0 ;------------------------------------------------- ; Create a packed-byte, null terminated string. DW "Hello World", 0 ;------------------------------------------------- ; Create data representing a line. The X position ; is implied from the position of the data in the ; device. The Y values are stored in the device. ; First, define an equation for the line. #DEFINE Line( X ) Slope * X + Y_Intercept ; Now define the values needed for the equation. Slope EQU 10 Y_Intercept EQU 5 ; Declare and initialize the X and Y values. VARIABLE X = 0, Y = Line( X ) ; Generate values until the maximum Y value is ; reached or the device is filled up. WHILE (Y <= MAX_VALUE) && ($ <= _24LCS21) DW Y X = X + 1 Y = Line( X ) ENDW ;------------------------------------------------- ; Perform some checking based on the line data ; generated above. ; If the device filled up before the end of the ; line was reached, generate an error. Otherwise, ; if the device is almost out of room, generate a ; message. IF (Y < MAX_VALUE) ERROR "Device is full." ELSE IF (($+10) > _24LCS21) MESSG "Device is nearly full." ENDIF ENDIF ;------------------------------------------------- ; Fill the rest of the device with zeroes. FILL 0, _24LCS21 - $ + 1 ENDCLRW COMMAND:
The CLRW encoding was changed on all 14-bit core devices from 0x0100 to 0x0103 (v1.40 and later). This will not affect the expected operation of the instruction, but it will change the value for the instruction in the hex file and therefore the checksum.
WARNING MESSAGE:The text for Message #302 was modified to explain more clearly that bank indication bits are stripped when assembling instructions that access file registers. The appropriate bank must be selected by the appropriate bank selection bits. For example, 14-bit core devices contain the lower seven bits of the file register address in the opcode, with two bank selection bits in the STATUS register. The message was changed from:
Argument out of range. Least significant bits used.to:
Register in operand not in bank 0. Ensure that bank bits are correct.END DIRECTIVE:
Take care to not use the END directive in a macro. If the END directive is encountered in a macro, it can cause the assembler to loop indefinitely. Macros should be terminated with the ENDM directive.