CSC231 Copying Strings in RAM

From dftwiki3
Revision as of 08:15, 19 September 2012 by Thiebaut (talk | contribs) (Copying msg1 into msg2, 1 byte at a time)
Jump to: navigation, search

--D. Thiebaut 09:08, 19 September 2012 (EDT)


A Program with 2 Strings

;;; movString1s.asm
;;; D. Thiebaut
;;;
;;; 
;;;
;;; To assemble, link, and run:
;;; 	nasm -f elf -F stabs movString1s.asm
;;; 	ld -melf_i386 -o movStrings1 movStrings1.o
;;; 	./movStrings1
;;;

		section	.data
msg1		db	"Smith College", 10
msg1Len		equ	$-msg1
msg2		db	".............", 10
	
		section	.text
		global	_start
_start:	

;;; print msg1
		mov	eax, 4
		mov	ebx, 1
		mov 	ecx, msg1
		mov	edx, msg1Len
		int	0x80

;;; print msg2
		mov	eax, 4
		mov	ebx, 1
		mov 	ecx, msg2
		mov	edx, msg1Len
		int	0x80
;;; exit
		mov	ebx, 0
		mov	eax, 1
		int	0x80



Copying msg1 into msg2, 1 byte at a time

(Remember, we don't know loops yet!)

     1                                  ;;; movString1s.asm
     2                                  ;;; D. Thiebaut
     3                                  ;;;
     4                                  ;;; This version copies msg1 to msg2
     5                                  ;;;
     6                                  ;;; To assemble, link, and run:
     7                                  ;;; 	nasm -f elf -F stabs movString1s.asm
     8                                  ;;; 	ld -melf_i386 -o movStrings2 movStrings2.o
     9                                  ;;; 	./movStrings2
    10                                  ;;;
    11                                  
    12                                  		section	.data
    13 00000000 536D69746820436F6C-     msg1		db	"Smith College", 10
    14 00000009 6C6567650A         
    15                                  msg1Len		equ	$-msg1
    16 0000000E 2E2E2E2E2E2E2E2E2E-     msg2		db	".............", 10
    17 00000017 2E2E2E2E0A         
    18                                  	
    19                                  		section	.text
    20                                  		global	_start
    21                                  _start:	
    22                                  
    23                                  ;;; print msg1
    24 00000000 B804000000              		mov	eax, 4
    25 00000005 BB01000000              		mov	ebx, 1
    26 0000000A B9[00000000]            		mov 	ecx, msg1
    27 0000000F BA0E000000              		mov	edx, msg1Len
    28 00000014 CD80                    		int	0x80
    29                                  
    30                                  ;;; print original msg2
    31 00000016 B804000000              		mov	eax, 4
    32 0000001B BB01000000              		mov	ebx, 1
    33 00000020 B9[0E000000]            		mov 	ecx, msg2
    34 00000025 BA0E000000              		mov	edx, msg1Len
    35 0000002A CD80                    		int	0x80
    36                                  
    37                                  ;;; copy msg1 into msg2
    38 0000002C A0[00000000]            		mov	al, byte [msg1]
    39 00000031 A2[0E000000]            		mov	byte[msg2], al
    40                                  
    41 00000036 A0[01000000]            		mov	al, byte [msg1+1]
    42 0000003B A2[0F000000]            		mov	byte[msg2+1], al
    43                                  
    44 00000040 A0[02000000]            		mov	al, byte [msg1+2]
    45 00000045 A2[10000000]            		mov	byte[msg2+2], al
    46                                  
    47 0000004A A0[03000000]            		mov	al, byte [msg1+3]
    48 0000004F A2[11000000]            		mov	byte[msg2+3], al
    49                                  
    50 00000054 A0[04000000]            		mov	al, byte [msg1+4]
    51 00000059 A2[12000000]            		mov	byte[msg2+4], al
    52                                  
    53 0000005E A0[05000000]            		mov	al, byte [msg1+5]
    54 00000063 A2[13000000]            		mov	byte[msg2+5], al
    55                                  
    56 00000068 A0[06000000]            		mov	al, byte [msg1+6]
    57 0000006D A2[14000000]            		mov	byte[msg2+6], al
    58                                  
    59 00000072 A0[07000000]            		mov	al, byte [msg1+7]
    60 00000077 A2[15000000]            		mov	byte[msg2+7], al
    61                                  
    62 0000007C A0[08000000]            		mov	al, byte [msg1+8]
    63 00000081 A2[16000000]            		mov	byte[msg2+8], al
    64                                  
    65 00000086 A0[09000000]            		mov	al, byte [msg1+9]
    66 0000008B A2[17000000]            		mov	byte[msg2+9], al
    67                                  
    68 00000090 A0[0A000000]            		mov	al, byte [msg1+10]
    69 00000095 A2[18000000]            		mov	byte[msg2+10], al
    70                                  
    71 0000009A A0[0B000000]            		mov	al, byte [msg1+11]
    72 0000009F A2[19000000]            		mov	byte[msg2+11], al
    73                                  
    74 000000A4 A0[0C000000]            		mov	al, byte [msg1+12]
    75 000000A9 A2[1A000000]            		mov	byte[msg2+12], al
    76                                  
    77                                  ;;; print new msg2
    78 000000AE B804000000              		mov	eax, 4
    79 000000B3 BB01000000              		mov	ebx, 1
    80 000000B8 B9[0E000000]            		mov 	ecx, msg2
    81 000000BD BA0E000000              		mov	edx, msg1Len
    82 000000C2 CD80                    		int	0x80
    83                                  
    84                                  ;;; exit
    85 000000C4 BB00000000              		mov	ebx, 0
    86 000000C9 B801000000              		mov	eax, 1
    87 000000CE CD80                    		int	0x80
    88                                  
    89