<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>http://www.alphalinux.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Alpha_Assembly</id>
	<title>Alpha Assembly - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://www.alphalinux.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Alpha_Assembly"/>
	<link rel="alternate" type="text/html" href="http://www.alphalinux.org/wiki/index.php?title=Alpha_Assembly&amp;action=history"/>
	<updated>2026-04-30T00:09:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.7</generator>
	<entry>
		<id>http://www.alphalinux.org/wiki/index.php?title=Alpha_Assembly&amp;diff=80&amp;oldid=prev</id>
		<title>Gareth: Imported from http://web.archive.org/web/20100713091906/http://www.alphalinux.org/wiki/index.php?title=Alpha_Assembly&amp;action=edit</title>
		<link rel="alternate" type="text/html" href="http://www.alphalinux.org/wiki/index.php?title=Alpha_Assembly&amp;diff=80&amp;oldid=prev"/>
		<updated>2019-08-29T18:07:18Z</updated>

		<summary type="html">&lt;p&gt;Imported from http://web.archive.org/web/20100713091906/http://www.alphalinux.org/wiki/index.php?title=Alpha_Assembly&amp;amp;action=edit&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Registers ==&lt;br /&gt;
&lt;br /&gt;
The Alpha has split integer and floating-point register files. It has 32 64-bit wide integer and 32 64-bit wide floating-point registers.&amp;lt;ref name=&amp;quot;Alpha Architecture Handbook&amp;quot;&amp;gt;{{cite web&lt;br /&gt;
|url=http://h18002.www1.hp.com/alphaserver/technology/literature/alphaahb.pdf|title=Alpha Architecture Handbook|year=1998|month=October|format=PDF|publisher=Compaq Computer Corporation}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Integer Registers ===&lt;br /&gt;
&lt;br /&gt;
Of the 32 integer registers, 12 are temporary registers, 6 are saved across function calls, and 6 are for passing arguments. The '''$31''' register always holds the value 0. Writes to it are ignored.&amp;lt;ref name=&amp;quot;Alpha Architecture Handbook&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:97%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Register&lt;br /&gt;
! Alternate Name&lt;br /&gt;
! Preserved?&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! $0&lt;br /&gt;
| $v0 || No || Return Value&lt;br /&gt;
|-&lt;br /&gt;
! $1-$8&lt;br /&gt;
| $t0-$t7 || No || Temporary Registers&lt;br /&gt;
|-&lt;br /&gt;
! $9-$14&lt;br /&gt;
| $s0-$s5 || Yes || Saved Registers&lt;br /&gt;
|-&lt;br /&gt;
! $15&lt;br /&gt;
| $s6 or $fp || Yes || Saved Register or Frame Pointer&lt;br /&gt;
|-&lt;br /&gt;
! $16-$21&lt;br /&gt;
| $a0-$a5 || No || Function Arguments&lt;br /&gt;
|-&lt;br /&gt;
! $22-$25&lt;br /&gt;
| $t8-$t11 || No || Temporary Registers&lt;br /&gt;
|-&lt;br /&gt;
! $26&lt;br /&gt;
| $ra || Yes || Function Return Address&lt;br /&gt;
|-&lt;br /&gt;
! $27&lt;br /&gt;
| $pv or $t12 || No || Procedure Value or Temporary Register&lt;br /&gt;
|-&lt;br /&gt;
! $28&lt;br /&gt;
| $at || No || Reserved for Assembler&lt;br /&gt;
|-&lt;br /&gt;
! $29&lt;br /&gt;
| $gp || No || Global Pointer&lt;br /&gt;
|-&lt;br /&gt;
! $30&lt;br /&gt;
| $sp || Yes || Stack Pointer&lt;br /&gt;
|-&lt;br /&gt;
! $31&lt;br /&gt;
| $zero || || Zero Sink&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Floating-Point Registers ===&lt;br /&gt;
&lt;br /&gt;
Of the 32 floating-point registers, 15 are temporary registers, 8 are saved across function calls, and 6 are for passing arguments. The '''$f31''' register always holds the value 0.0. Writes to it are ignored.&amp;lt;ref name=&amp;quot;Alpha Architecture Handbook&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:97%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Register&lt;br /&gt;
! Preserved?&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
! $f0&lt;br /&gt;
| No || Return Value&lt;br /&gt;
|-&lt;br /&gt;
! $f1&lt;br /&gt;
| No || Return Value of Imaginary Part&lt;br /&gt;
|-&lt;br /&gt;
! $f2-$f9&lt;br /&gt;
| Yes || Saved Registers&lt;br /&gt;
|-&lt;br /&gt;
! $f10-$f15&lt;br /&gt;
| No || Temporary Registers&lt;br /&gt;
|-&lt;br /&gt;
! $f16-$f21&lt;br /&gt;
| No || Function Arguments&lt;br /&gt;
|-&lt;br /&gt;
! $f22-$f30&lt;br /&gt;
| No || Temporary Registers&lt;br /&gt;
|-&lt;br /&gt;
! $f31&lt;br /&gt;
| || Zero Sink&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hello, World! ==&lt;br /&gt;
&lt;br /&gt;
 # hello.S&lt;br /&gt;
 # gcc hello.S -o hello&lt;br /&gt;
 # ./hello&lt;br /&gt;
 &lt;br /&gt;
 .data&lt;br /&gt;
 PRINT:	.ascii		&amp;quot;Hello, World!\n&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 .text&lt;br /&gt;
 	.align	4&lt;br /&gt;
 	.set	noreorder&lt;br /&gt;
 	.arch	ev4&lt;br /&gt;
 	.globl	main&lt;br /&gt;
 	.ent	main&lt;br /&gt;
 &lt;br /&gt;
 main:	ldgp	$gp,0($27)		# load global pointer (necessary)&lt;br /&gt;
 	stq	$26,0($sp)		# setup stack pointer&lt;br /&gt;
 &lt;br /&gt;
 	lda	$16,PRINT		# load format string&lt;br /&gt;
 					# $16 is first argument to functions&lt;br /&gt;
 	jsr	$26,printf		# call printf&lt;br /&gt;
 	ldgp	$gp,0($26)		# reload global pointer&lt;br /&gt;
 					# (necessary after function calls)&lt;br /&gt;
 &lt;br /&gt;
 	mov	$31,$0			# return val = 0&lt;br /&gt;
 	ldq	$26,0($sp)		# clean up stack&lt;br /&gt;
 	ret	$31,($26),1		# return, (1 signifies return from a procedure)&lt;br /&gt;
 	.end	main&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [http://h18002.www1.hp.com/alphaserver/technology/chip-docs.html Alpha Architecture Chip Documents]&lt;br /&gt;
** [http://h18002.www1.hp.com/alphaserver/technology/literature/cmpwrgd.pdf Compiler Writer's Guide for the Alpha 21264]&lt;br /&gt;
* [http://mattst88.com/programming/?page=alpha-asm Alpha Assembly for Linux/UNIX]&lt;br /&gt;
* [http://www.cs.hut.fi/~cessu/compilers/alpha-intro.html Introduction to Alpha]&lt;br /&gt;
* [http://lkml.org/lkml/1998/3/29/96 Re: Question re: Alpha asm code]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Gareth</name></author>
		
	</entry>
</feed>