+1 480 409 0818 

X86 External Procedures for String Concatenation

;--------------------------------------------------------- ; Program that uses the procedure strCat to concatenate two strings ; ; Author: xxxxxxxxx ; Date: 11/17/2018 ;--------------------------------------------------------- INCLUDE Irvine32.inc EXTERN strCat:PROC ; declare the external strCat subroutine .data prompt DB "Enter a string", 10, 0 string1 DB 200 DUP(0) ; space to save first string and concatenation string2 DB 100 DUP(0) ; space to save second string .code main PROC mov edx, OFFSET prompt ; print prompt for first string call WriteString mov edx, OFFSET string1 ; read first string and save it in the string1 space mov ecx, 100 ; read at most 100 characters call ReadString mov edx, OFFSET prompt ; print prompt for second string call WriteString mov edx, OFFSET string2 ; read second string and save it in the string2 space mov ecx, 100 ; read at most 100 characters call ReadString push OFFSET string2 ; pass second string on the stack as second argument to strCat push OFFSET string1 ; pass first string on the stack as first argument to strCat call strCat ; concatenate using strCat mov edx, OFFSET string1; print the concatenated string, which is saved in string1 call WriteString call CrLf ; print a new line call WaitMsg ; wait for the user to press a key exit ; exit the program main ENDP END main ;--------------------------------------------------------- ; strCat: Concatenates two strings, receives the addresses ; for the two strings on the stack ; ; Author: xxxxxxxxx ; Date: 11/17/2018 ;--------------------------------------------------------- INCLUDE Irvine32.inc .code PUBLIC strCat strCat PROC C push ebp ; save ebp on the stack mov ebp, esp ; load stack frame address in ebp push esi ; save esi contents on the stack push edi ; save edi contents on the stack mov edi, [ebp + 8] ; load first string pointer in edi endStrLoop: mov al, [edi] ; load a character from the first string cmp al, 0 ; see if we reached the end of the string je endFound ; if we reached the end, terminate the loop inc edi ; else, advance to next char in string jmp endStrLoop ; repeat to find end of string endFound: mov esi, [ebp + 12] ; load second string pointer in edi catLoop: mov al, [esi] ; load a character from the second string mov [edi], al ; save the char at the end of the first string cmp al, 0 ; see if we reached the end of the string je endCat ; if so, we have concatenated the strings, end loop inc esi ; else, advance to next character in second string inc edi ; and advance to next space at end of first string jmp catLoop ; repeat to concatenate next character endCat: pop edi ; restore prevoius value of edi pop esi ; restore prevoius value of esi pop ebp ; restore ebp stack frame ret 8 ; return to the main procedure, pop arguments strCat ENDP END