NLZ: Difference between revisions

From NDWiki
Jump to navigation Jump to search
(Describe how NLZ is used as standard method to test for 48-bit vs. 32-bit floating point)
(Register notation uniformity fix)
 
(2 intermediate revisions by the same user not shown)
Line 4: Line 4:
|Format=NLZ ''<scaling>''
|Format=NLZ ''<scaling>''
|Code=151&nbsp;400
|Code=151&nbsp;400
|Affected=(T), (A), (D)
|Affected=T, A, D
|Architecture=[[ND-100]], [[ND-110 CPU|ND-110]]
|Architecture=[[ND-100]], [[ND-110 CPU|ND-110]]
}}
}}
Line 25: Line 25:
For 32-bit floating point operations NLZ works as described above, except that the T register is not affected. This can also be used to test for 48-bit vs. 32-bit CPUs. The method is described in {{ND-doc|06.029.01}}<ref>{{ND-doc|06.029.01}}</ref> p.72:
For 32-bit floating point operations NLZ works as described above, except that the T register is not affected. This can also be used to test for 48-bit vs. 32-bit CPUs. The method is described in {{ND-doc|06.029.01}}<ref>{{ND-doc|06.029.01}}</ref> p.72:


  SAT 0           ; Set T register to zero (INSTRUCTION-B test program uses 'COPY 0 DT')
  SAT 0   % Set T register to zero (INSTRUCTION-B test program uses 'COPY 0 DT')
  SAA 1           ; Set A register bit one
  SAA 1   % Set A register bit one
  NLZ 16         ; Normalize with scaling factor 16 decimal
  NLZ 16   % Normalize with scaling factor 16 decimal
  ; Test if T is changed (non-zero). If so, the CPU is 48-bit, otherwise it is 32-bit.
  % Test if T is changed (non-zero). If so, the CPU is 48-bit, otherwise it is 32-bit.


== References ==
== References ==
<references/>
*{{ND-doc|06.014.02|pages 120, 144, 146 and 240}}
*{{ND-doc|06.014.02|pages 120, 144, 146 and 240}}
*{{ND-doc|06.029.01|page 70 and 72}}
*{{ND-doc|06.029.01|page 70 and 72}}

Latest revision as of 08:48, 21 March 2013

NLZ
Description Normalize (integer to floating)
Format NLZ <scaling>
Code 151 4008
Affected T, A, D
Type User
Architecture ND-100, ND-110

NLZ is an assembly instruction. It converts the number in the A register to a standard form 48-bit floating point number in the floating point accumulator (T, A and D registers), using the scaling of the NLZ instruction as a scaling factor.

The scaling is given to the conversion of -128 to 127 (approximately 10-39 to 1039).

For integers, a scaling factor of +1610 will give a floating point number with the same value as the integer. A larger scaling factor will result in a higher floating point number. Because of the single precision fixed point number, the D register will be cleared.


Example

  • NLZ+20 (code 151420) Convert from integer to floating point.


NLZ on 32-bit floating point CPUs

Main article: 32-bit floating point

The ND-100/110 can have a 48-bit floating point CPU (standard configuration) or a 32-bit floating point CPU (customer option). For 32-bit floating point operations NLZ works as described above, except that the T register is not affected. This can also be used to test for 48-bit vs. 32-bit CPUs. The method is described in Norsk Data Document ND–06.029.01 ND-110 Instruction Set [1] p.72:

SAT 0    % Set T register to zero (INSTRUCTION-B test program uses 'COPY 0 DT')
SAA 1    % Set A register bit one
NLZ 16   % Normalize with scaling factor 16 decimal
% Test if T is changed (non-zero). If so, the CPU is 48-bit, otherwise it is 32-bit.

References

  1. Norsk Data Document ND–06.029.01 ND-110 Instruction Set