Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
en:multiasm:papc:chapter_6_12 [2025/11/14 11:53] – [Operators] ktokarzen:multiasm:papc:chapter_6_12 [2025/11/17 08:33] (current) – [Constants] ktokarz
Line 74: Line 74:
   * **HIGH32**, **LOW32**     - high/low 32 bits of 64-bit variable/address   * **HIGH32**, **LOW32**     - high/low 32 bits of 64-bit variable/address
  
- +The type operators are used in address expressions. They determine the number of bytes in a single variable, the number of elements in a data array, or the size of a whole data array {{ref>masmtypeoperators}}. They are very useful because they can automatically recalculate, for example, the number of iterations necessary to review a string of characters or a data array when its length changes.
- +
- +
-The type operators determine the number of bytes in a single variable, the number of elements in a data array, or the size of a whole data array {{ref>masmtypeoperators}}. They are very useful because they can automatically recalculate, for example, the number of iterations necessary to review a string of characters or a data array when its length changes.+
 <table masmtypeoperators> <table masmtypeoperators>
 <caption>MASM type operators</caption> <caption>MASM type operators</caption>
Line 125: Line 122:
  
  
-===== Important directives =====+===== Selected directives =====
  
 The **ORG** directive sets the location counter to the specified value x. It is used to align the parts of the program to a specific address. The **ORG** directive sets the location counter to the specified value x. It is used to align the parts of the program to a specific address.
Line 136: Line 133:
 The **LABEL** directive creates a new label by assigning the current location-counter value and the given type to the defined name. Usually in a program, the **:** (colon) sign is used for label definition, but the **LABEL** directive enables specifying the type of element which the label points to. The **LABEL** directive creates a new label by assigning the current location-counter value and the given type to the defined name. Usually in a program, the **:** (colon) sign is used for label definition, but the **LABEL** directive enables specifying the type of element which the label points to.
  
 +===== Data definition directives =====
 There is a set of directives for defining variables. They enable the assignment of a name to a variable and the specification of its type. They are summarised in a table There is a set of directives for defining variables. They enable the assignment of a name to a variable and the specification of its type. They are summarised in a table
 {{ref>masmdatadefine}}. {{ref>masmdatadefine}}.
Line 192: Line 190:
   inc RBX   inc RBX
   loop clear   loop clear
 +</code>
 +
 +===== Constants =====
 +Constants in an assembler program define the name for the value that can't be changed during normal program execution. It is the assembly-time assignment of the value and its name. Although their name suggests that their value can't be altered, it is true at the program run-time. Some forms of constants can be modified during assembly time. Usually, constants are used to self-document the code, parameterise the assembly process, and perform assembly-time calculations.
 +The constants can be integer, floating-point numeric, or text strings.\\
 +Integer numeric constants can be defined with the data assignment directives, **EQU** or the equal sign **=**. The difference is that a numeric constant defined with the EQU directive can’t be modified later in the program, while a constant created with the equal sign can be redefined many times in the program. Numeric constants can be expressed as binary, octal, decimal or hexadecimal values. They can also be a result of an expression calculated during assembly time. It is possible to use a previously defined constant in such an expression.
 +<code asm>
 +int_const1 EQU 5                ; no suffix by default decimal value
 +int_const_dec = 7               ; finished with "d", "D", "t", "T", or by default without suffix
 +int_const_binary = 100100101b   ; finished with "b", "B", "y", or "Y"
 +int_const_octal = 372o          ; finished with "o", "O", "q", or "Q"
 +int_const_hex = 0FFA4h          ; finished with "h", or "H"
 +int_const_expr = int_const_dec * 5
 +</code> 
 +Floating-point numeric constants can be defined with the **EQU** directive only. The number can be expressed in decimal or scientific notation.
 +<code asm> 
 +real_const1 EQU 3.1415          ; decimal
 +real_const2 EQU 6.28e2          ; scientific
 +</code>
 +Text string constants can be defined with **EQU** or **TEXTEQU** directives. Text constants assigned with the **EQU** or **TEXTEQU** directive can be redefined later in the program. The **TEXEQU** is considered a text macro and is described in the section about macros.
 +<code asm>
 +text_const1 EQU 'Hello World!'
 +text_const2 EQU "Hello World!"
 +</code>
 +
 +
 +===== Conditional assembly directives =====
 +
 +The condition assembly directives have the same functionality as in high-level language compilers. They control the assembly process by checking the defined conditions and enabling or disabling the process for fragments of the source code.
 +  * **IF** expression, **IFE** expression - tests the value of the expression and performs (or do not) assemble according to the result (0-false),
 +  * **IFDEF** symbol - tests whether a symbol is defined,
 +  * **IFNDEF** symbol - tests whether a symbol is undefined,
 +  * **IFB** <argument> - tests whether the string argument is empty, 
 +  * **IFNB** <argument> - tests whether the string argument is empty. 
 +The conditional assembly statement, together with optional **ELSEIF** and **ELSE** statements, is shown in the following code.
 +<code asm>
 +IF expression1
 +statements
 +[[ELSEIF expression2
 +statements ]]
 +[[ELSE
 +statements ]]
 +ENDIF
 </code> </code>
 ===== Statements ===== ===== Statements =====
en/multiasm/papc/chapter_6_12.1763121184.txt.gz · Last modified: 2025/11/14 11:53 by ktokarz
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0