Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
59
Добавлен:
14.04.2015
Размер:
2.03 Mб
Скачать

160

Chapter 5. Assembler Macros

 

 

Predefined C Macro Constants

Ax51 provides you with predefined constants to use in preprocessor directives and C code for more portable programs. The following table lists and describes each one.

Constant

Description

_ _A51_ _

Allows you to identify the A51 assembler and returns the version number (for

 

example, 600 for version 6.00). Only defined when using A51.

_ _AX51_ _

Allows you to identify the AX51 assembler and returns the version number

 

(for example, 100 for version 1.00). Only defined when using AX51.

_ _A251_ _

Allows you to identify the A251 assembler and returns the version number

 

(for example, 300 for version 3.00). Only defined when using A251.

_ _DATE_ _

Date when the compilation was started.

_ _FILE_ _

Name of the file being compiled.

_ _KEIL_ _

Defined to 1 to indicate that you are using a development tool from Keil

 

Software.

_ _LINE_ _

Current line number in the file being compiled.

_ _TIME_ _

Time when the compilation was started.

_ _STDC_ _

Defined to 1 to indicate full conformance with the ANSI C Standard.

5

Keil Software — A51/AX51/A251 Macro Assembler and Utilities

161

 

 

Examples with C Macros

The following assembler source file shows the usage of C Macros.

#if !defined (__A51__) || __A51__ < 600

#error "This source file requires A51 V6.00 or higher" #endif

#pragma NOLIST

#include <reg52.h> // register definition file for 80C52 #pragma LIST

#define TEST1 10

#define MYTEXT "Hello World"

#if TEST1 == 10 DB MYTEXT

#endif

DB "GENERATED: ", __DATE__

MOV R0,#TEST1 * 10

END

The listing file generated by A51 shows the text replacements performed by the C preprocessor:

 

 

 

 

 

 

5

LOC

OBJ

LINE

SOURCE

 

 

 

 

 

 

 

1

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

117

$LIST

 

 

 

 

 

118

 

 

 

 

 

 

119

 

 

 

 

 

 

120

 

 

 

 

 

 

121

 

 

 

 

 

 

122

 

 

 

 

0000

48656C6C

123

DB

"Hello World"

 

0004

6F20576F

 

 

 

 

 

0008

726C64

 

 

 

 

 

 

 

124

 

 

 

 

000B

47454E45

125

DB

"GENERATED: ", "Jul 28 2000"

 

000F

52415445

 

 

 

 

 

0013

443A204A

 

 

 

 

 

0017

756C2032

 

 

 

 

 

001B

38203230

 

 

 

 

 

001F

3030

 

 

 

 

 

 

 

126

 

 

 

 

0021

7864

127

MOV

R0,#10 * 10

 

 

 

128

 

 

 

 

 

 

129

END

 

 

 

162

Chapter 5. Assembler Macros

 

 

C Preprocessor Side Effects

The integrated C preprocessor in Ax51 has two side effects. This might cause problems when you translate programs that are written for previous Ax51 versions.

1.If you are using the backslash character at the end of a comment line, the next line will be a comment too.

; THIS IS A COMMENT ENDING WITH \

MOV A,#0 DUE TO THE \ IN THE PREVIOUS LINE THE LINES A CONCATINATED

;AND THE MOV INSTRUCTION WILL NOT BE TRANSLATED

2.If you are using $INCLUDE in conditional assembly blocks, the file must exist even when the block will not be assembled.

$IF 0

 

$INCLUDE (MYFILE.INC)

; this file must exist, even when the block

 

; is not translated, since the C preprocessor

$ENDIF

; interprets the file first.

#if 0

// with C preprocessor statements

#include (myfile.inc)

// the file needs not to exist

#endif

 

5

Соседние файлы в папке HLP