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

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

127

 

 

Procedure Declaration (AX51 & A251 only)

Ax51 provides procedures to implement the concept of subroutines. Procedures can be executed in-line (control “falls through” to them), jumped to, or invoked by a CALL. Calls are recommended as a better programming practice.

PROC / ENDP (AX51 & A251 only)

The PROC and ENDP directives are used to define a label for a sequence of machine instructions called a procedure. For the Philips 80C51MX and Intel/Atmel WM 251 architecture a procedure may have either the type NEAR or FAR. Depending on the type it is called with LCALL or ACALL (for NEAR) or ECALL (for FAR). Unlike C functions, assembler procedures do not provide local scopes for labels. Identifiers must be unique in A251 because the visibility is module wide. The format of the PROC/ENDP directives is:

name

PROC

[ type ]

4

 

; procedure text

:

 

 

 

 

 

:

 

 

 

 

 

 

RET

 

 

 

name

ENDP

 

 

 

where

 

 

 

 

 

name

 

is the name of the procedure.

 

type

 

specifies the type of the procedure, and must be one of the

 

 

 

following:

 

 

 

 

 

 

 

 

 

 

 

Type

Description

 

 

 

 

none

The type defaults to NEAR

 

 

 

 

NEAR

Defines a near procedure; called with LCALL or ACALL.

 

 

 

 

FAR

Defines a far procedure; called with ECALL.

 

Shaded directives and options are available only in AX51 and A251.

128

Chapter 4. Assembler Directives

 

 

You should specify FAR if the procedure is called from a different 64KByte segment. A procedure normally ends with a RET instruction. The software instruction RET will automatically be converted to an appropriate machine return instruction. For example:

RET

Return from a near procedure.

ERET

Return from a far procedure.

Example

 

 

 

P100

PROC

NEAR

 

 

RET

 

; near return

 

ENDP

 

 

P200

PROC

FAR

 

 

RET

 

; far return (ERET)

 

ENDP

 

 

P300

PROC

NEAR

 

 

CALL

P100

; LCALL

4

CALL

P200

; ECALL

RET

 

; near return

 

 

ENDP

END

Shaded directives and options are available only in AX51 and A251.

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

129

 

 

LABEL (AX51 and A251 only)

A label is a symbol name for an address location in a segment. The LABEL directive can be used to define a program label. The label name can be followed by a colon, but it is not required. The label inherits the attributes of the program or code segment currently active. The LABEL directive may therefore never be used outside the scope of a program segment. The syntax of that directive is:

name[:] LABEL [ type ]

where

 

 

 

name

is the name of the label.

 

type

specifies the type of the label, and must be one of the following:

 

 

 

 

 

 

Type

Description

 

 

none

The type defaults to NEAR

4

 

NEAR

Defines a near label.

 

FAR

Defines a far label; use ECALL or EJMP.

You should specify FAR if the label will be referenced from a different 64KByte segment. NEAR lets you refer to this label for the current 64KByte segment.

Example

 

RSEG

ECODE_SEG1

; activate an ECODE segment

ENTRY:

LABEL

FAR

; entry point

 

RSEG

ECODE_SEG2

; activate another ECODE segment

 

EJMP

ENTRTY

; Jump across 64KB segment

Shaded directives and options are available only in AX51 and A251.

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