Difference between revisions of "CSC231 Copying Strings in RAM"

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

Revision as of 08:15, 19 September 2012

--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