Please disable adblock to view this page.

← Go home

String Manipulation – concatenation & substring using extern (Assembly x86)

April 23, 2016
Published By : Pratik Kataria
Categorised in: ,

;****str1.asm****

extern conc_proc,sub_proc

global str1,str1_size,str2,str2_size    ;global should be used instead of extern

%include “macro.asm”

section .data

msg db 10,13,”Enter the first string : ”
msgl equ $-msg

msg1 db 10,13,”Enter the second string : ”
msgl1 equ $-msg1

msg2 db 10,10,”########  WELCOME TO MENU DRIVEN PROGRAMME  #########”
db 10,10,”1)Contactenate the string”,10,”2)Substring”,10,”3)Exit”
db 10,10,”Enter your choice ”

msgl2 equ $-msg2

section .bss

choice resb 2
str1 resb 50
str2 resb 50
str1_size resb 4
str2_size resb 4

section .text

global _start
_start:

display msg,msgl
accept str1,50
dec eax
mov [str1_size],eax

display msg1,msgl1
accept str2,50

dec eax
mov [str2_size],eax

display msg2,msgl2
accept choice,2

cmp byte [choice],31h
je l1

cmp byte [choice],32h
je l2

exit

l1:    call conc_proc
jmp _start

l2:
call sub_proc
jmp _start
;****str2.asm****

global conc_proc,sub_proc

extern str1,str1_size,str2,str2_size
%include “macro.asm”

section .data

msg db 10,”Contactenated string is ”
msgl equ $-msg

msg1 db 10,”Substring is present”
msgl1 equ $-msg1

msg2 db 10,”Substring is not present”
msgl2 equ $-msg2

msg3 db 10,”Number of substring is ”
msgl3 equ $-msg3

section .bss

str3 resb 100
str3_size resb 2
subs resb 50
end_add resb 4
curr_add resb 4    ;we have to use curr_add
sscount resb 2
dispbuff resb 4
section .text
global _main
_main:

conc_proc:

mov esi,str1
mov edi,str3
mov ecx,0        ;this step should be include otherwise it well give error
mov ecx,[str1_size]

rep movsb

mov esi,str2
mov ecx,0
mov ecx,[str2_size]

rep movsb

mov ecx,0
mov ecx,[str1_size]
add ecx,[str2_size]

mov [str3_size],ecx

display msg,msgl
display str3,[str3_size]

ret

sub_proc:
mov esi,str1
mov [curr_add],esi
mov ecx,[str1_size]
add esi,ecx
dec esi
mov [end_add],esi

mov eax,00h
mov [sscount],eax

mov esi,str1

begin:
mov edi,str2
mov ecx,00h
mov ecx,[str2_size]

repe cmpsb

jne conti
inc byte [sscount]

conti:
inc byte [curr_add]
mov esi,[curr_add]
cmp esi,[end_add]
jbe begin

cmp byte [sscount],00h
je no

display msg3,msgl3
display msg1,msgl1
mov bx,[sscount]
mov ecx,4
mov esi,dispbuff

l1:
rol bx,4
mov al,bl
and al,0fh
cmp al,9h
jbe l2
add al,7h

l2:    add al,30h
mov [esi],al
inc esi
loop l1
;add eax,30h
;mov [sscount],eax

display dispbuff,4
jmp end

no:display msg2,msgl2

end:
ret
;****macro.asm****

%macro display 2

mov eax,4
mov ebx,1
mov ecx,%1
mov edx,%2
int 80h

%endmacro

%macro accept 2

mov eax,3
mov ebx,0
mov ecx,%1
mov edx,%2
int 80h

%endmacro

%macro exit 0

mov eax,1
mov ebx,0
int 80h

%endmacro

View Article Page
Download

Pratik Kataria is a budding programmer, web designer and developer.