HP UX Developer Tools manual Copying a String, 132

Page 132

Programming Examples

2. Copying a String

2. Copying a String

This example contains a section of assembly code that moves a byte string of arbitrary length to an arbitrary byte address.

;The routine reflect copies bytes from the source location

;to the destination location.

;

;The first parameter is the source address and the second

;parameter is the destination address.

;

;The third parameter is the number of bytes to copy.

;For performance, larger chunks of bytes are handled differently.

.CODE

.EXPORT reflect,ENTRY

reflect

 

 

.PROC

 

 

.CALLINFO

ENTRY_GR=6,SAVE_RP

 

.ENTER

 

 

COMB,=,N

%arg2,%r0,fallout

; done, count is zero

COMB,<,N

%arg2,%r0,choke

; caller error, neg count

OR

%arg0,%arg1,%r6

; source and dest

OR

%r6,%arg2,%r6

; count

EXTRU,=

%r6,31,2,%r0

; 2 low order bits = 0?

B,N

onebyte

; yes, skip this branch

ADDIBT,<,N

-16,%arg2,chekchunk

; no, skip chunkify if count<0

chunkify

 

 

LDWM

16(%arg0),%r6

; word 1- > temp1

 

 

; point ahead 4 words in source

LDW

-12(%arg0),%r5

; place mark 3 wds back- >temp2

LDW

-8(%arg0),%r4

; place mark 2 wds back- >temp3

LDW

-4(%arg0),%r3

; place mark 1 wds back- >temp4

STW

%r5,4(%arg1)

; dest wd 2 <-temp2

STWM

%r6,16(%arg1)

; dest wd 1 <-temp1

 

 

; point ahead 4 words in dest

STW

%r4,-8(%arg1)

; dest wd 3 <-temp3

ADDIBF,<

-16,%arg2,chunkify

; loop if count > 0

STW

%r3,-4(%arg1)

; dest wd 2 <-temp1

chekchunk

 

 

ADDIBT,<

12,%arg2,exeunt

; go if count < -12

COPY

%r0,%ret0

; clear rtnval

subchunk

 

 

LDWS,MA

4(%arg0),%r6

; word- >temp1

 

 

; point ahead 4 bytes in source

ADDIBF,<

-4,%arg2,subchunk

; go if count<4

STWS,MA

%r6,4(%arg1)

; dest< -temp1

 

 

; point ahead 4 bytes in dest

132

Chapter 7

Image 132
Contents HP 9000 Computers 92432-90012 JuneLegal Notices Restricted Rights LegendHanover Street Palo Alto, California Contents Assembler Directives and Pseudo-Operations Contents Contents Contents Contents Pseudo-Instruction Set Assembling Your Program Diagnostic Messages Programming ExamplesIndex Preface Printing HistoryEdition Date Software Version Audience Related DocumentationTypographical Conventions This ManualSummary of Technical Changes for HP-UX Assembly Language Assembler FeaturesAssembler Features Summary of Changes for PA-RISC Summary of Changes for PA-RISC 2.0W Wide Mode, 64-bitSummary of Changes for PA-RISC ChapterSummary of Changes for PA-RISC 2.0W Wide Mode, 64-bit Program Structure Program Structure Label Opcode Operands CommentsSymbols and Constants Symbols and ConstantsInteger Constants Signed Unsigned Registers and Register Mnemonics Registers and Register MnemonicsRegisters by using an L or R suffix General Registers Single-Precision Floating-Point Registers Double-Precision Floating-Point Registers Space RegistersControl Registers Synonyms Register Procedure Calling Conventions Register Synonyms DescriptionExpressions ExpressionsStandard Arithmetic Operators Operator OperationLegal Combinations For Relocatable Terms Operation Result Available Field Selectors Meaning Field Meaning Selector Multiple of 2048 allows a three-instruction sequence Parenthesized Subexpressions Operands and Completers Operands and CompletersAddi Macro Processing Defining New Instructions With MacrosMacro Processing Contains general register 19, or binary 10011. These HP-UX Architecture Conventions SpacesSpaces Memory Layout on HP-UX Sr4 Sr5 Sr6 Subspaces AttributesSubspaces Directives Standard Subspaces and Sort KeysSpace Subspace Sort Key Use Sections in 64-bit Mode Sections in 64-bit Mode$INIT$ Location Counters Location CountersCompiler Conventions Compiler ConventionsCompiler Conventions Global Symbol Usage Mfctl Assembly Listing Shared LibrariesShared Libraries Assembly Listing Introduction Assembler DirectivesDirective Function Requests common storage for a specified number Bytes Pseudo-Operations Directive Function Reserves 16 bits a half word of storage Align Directive SyntaxParameters ExampleAllow Directive DiscussionAllow Directive To the .LEVEL specified for the file Block and .BLOCKZ Pseudo-Operations Block and .BLOCKZ Pseudo-OperationsSpace $TEXT$ Subspa $CODE$ Block Byte Pseudo-Operation Byte Pseudo-OperationByte initvalue , initvalue Call Directive Call DirectiveCall argumentdescription argumentdescription Form of argument-description is Arg=location Where arg can Return value for a procedurefirst word in the argument list Second word in the argument listLIT Align Word Procend Export Callinfo Directive Callinfo DirectiveCallinfo parameter , parameter Register ENTRYSR= Unwound It restores the RP value when it encounters a .LEAVE Callinfo Directive Stack Frames Re-enter code subspace Comm Directive Comm DirectiveLabel .COMM numbytes Label Labels the location of the reserved storageCopyright Directive Copyright DirectiveCompany-name Proc Callinfo Enter Integer .fraction E power Fraction E powerDouble Pseudo-Operation Double Pseudo-OperationDword Pseudo-Operation Dword Pseudo-OperationDword initvalue , initvalue END Directive END DirectiveEndm Directive Endm DirectiveEnter and .LEAVE Pseudo-Operations Enter and .LEAVE Pseudo-OperationsSpace $TEXT$ Entry and .EXIT Directives Entry and .EXIT DirectivesSymbolicname .EQU value EQU DirectiveEQU Directive ValueExport Directive Export DirectiveArgument Export proc,ENTRY,ARGW0=GR Float Pseudo-Operation Float Pseudo-OperationHalf Pseudo-Operation Half Pseudo-OperationHalf initvalue , initvalue Import Directive Import DirectiveNOP END Label Directive Label DirectiveLabel labelid Labelid Names the label identifierLevel Directive Level DirectiveLevel Directive Listoff and .LISTON Directives Listoff and .LISTON DirectivesListon Code Space $TEXT$ SPNUM=0,SORT=0 Subspa $CODE$ Locct Directive Locct DirectiveMacro Directive Macro DirectiveLabel .MACRO formalparameter,formalparameter Examples 100 Origin Directive Origin DirectiveChapter 101 Proc and .PROCEND Directives Proc and .PROCEND Directives102 Chapter 103 REG Directive REG DirectiveLabel .REG typedregister Label User-defined register nameShlibversion Directive Shlibversion DirectiveChapter 105 Space Directive Space Directive106 Chapter 107 Spnum Pseudo-Operation Spnum Pseudo-Operation108 String and .STRINGZ Pseudo-Operations String and .STRINGZ Pseudo-OperationsChapter 109 110 Subspa Directive Subspa DirectiveName An identifier that names the current subspace Chapter 111112 Chapter 113 Version Directive Version Directive114 Word Pseudo-Operation Word Pseudo-OperationWord initvalue , initvalue Chapter 115Directive Space Name Default Parameters Programming AidsProgramming Aids Predefined Subspace DirectivesShortdata Chapter 117Programming Aids 118 Pseudo-Instruction Set 119120 Compare and Branch Conditions Comb and Comib Cond DescriptionChapter 121 Add and Branch Conditions Addb and Addib Description 122Invoking the Assembler 123Using the as Command Using the as CommandAssemble code for the architecture 124filename LevelChapter 125 Wnumber Tables, see HP-UX Linker and LibrariesOnline User Guide 126Using the cc Command Using the cc CommandPassing Arguments to the Assembler Wa, ,as-argument as-argumentCpp Preprocessor 128Programming Examples 129Binary Search for Highest Bit Position Binary Search for Highest Bit Position130 Chapter 131 Copying a String Copying a String132 Chapter 133 Dividing a Double-Word Dividend Dividing a Double-Word Dividend134 Programming Examples Chapter 135Demonstrating the Procedure Calling Convention Demonstrating the Procedure Calling ConventionProgram Listing 136Assembly Program Listing Chapter 137Output of the cc -S Command Assembly Program Listing From the C CompilerOutput of the cc -S Command 138Chapter 139 Output of the cc -S Command 140 141 Option operand 142Chapter 143 Reserve 144Wrong register type used Use a general registerChapter 145 Use a space register Use a control register146 Chapter 147 148 Chapter 149 150 Chapter 151 Used to invoke the assembler 152Chapter 153 Error Messages Error Messages154 Chapter 155 156 Chapter 157 158 1027 10281029 10301031 10321033 10341035 10361037 1038162 Chapter 163 1054 10551056 1057Chapter 165 166 Chapter 167 168 Format keyword=value 10801081 1082170 1088 10891090 Chapter 1711091 10941095 10961097 10981099 11001101 11021103 11041105 Chapter 175Panic Messages Panic Messages176 2005 20062007 2008User Warning Messages User Warning Messages178 7003 70047005 7006180 Chapter 181 182 Limit Error Messages Limit Error Messages7200 72017202 72037204 184Diagnostic Messages Chapter 185186 Branching Error Messages Branching Error MessagesChapter 187 188 Chapter 189 190 Chapter 191 192 7827 78287834 78357836 7837Expr 194Index Index 195196 NumericsIndex 197 Copyright198 HP C/HP-UX,49Index 199 Mfctl200 DoubleIndex 201 See also memory202
Related manuals
Manual 29 pages 37.9 Kb Manual 44 pages 5.6 Kb Manual 2 pages 37.54 Kb