Since I'm guessing that your doing this more for the learning element then for the actual usefulness of the code. Might I suggest you read up a bit more on assembly: http://courses.ece.uiuc.edu/ece390/b.../inst-ref.html

Thats one of the x86 assembly instruction set sites on the web. The intel specific is at http://www.intel.com/products/proces...uals/index.htm

Why you would perform the move in assembly and then perform the loop in standard pascal is what is confusing to me. If your going to do it in assembly, perform the entire operation in assembly. Otherwise just use the code posted using records and arrays instead .

Using MOVSB (Move Single Byte) would also make more sense if your wanting to reverse order the bytes on the out.

Example from Gavin's Guide to assembly (http://burks.brighton.ac.uk/burks/language/asm/)for moving a string (and yes, you could load your single instead and use decrement):
Code:
cld 			; clear direction flag
mov si,OFFSET String1 	; make ds:si point to String1
mov di,OFFSET String2 	; make es:di point to String2
mov cx,18 		; length of strings - In your case this would be 4
rep movsb 		; copy string1 into string2

BTW: Technomage, your array should be 0..3 not 0..4 and should be of type char instead of byte. I know the compilers take care of the matter for you, but since the cast is local it makes more sense to just have the type as Char to start with. That is, unless the 64 bit versions are suddenly going to re-define what a char is .