.stack 100h
.data
; Its recommended to display a message to user before every input and output
; Message for first input
msg1 db "Enter the first string: $"
; Message for second input
msg2 db 0ah, 0dh, "Enter the second string: $"
; Message for third input
msg3 db 0ah, 0dh, "New string is: $"
; For each buffered input, we have to reserve space such that
tsize1 db 10 ; First byte contains a value that indicates the number of characters to be received at maximum
asize1 db ? ; Second byte is reserved for interrupt's use
array1 db 10 dup(?) ; The third byte and on for saving the input. The minimum amount of space required
; here is equal to the value of first byte
; For second input
tsize2 db 10
asize2 db ?
array2 db 10 dup(?)
; Here both values would be concatenated. So, it must be sum of the sizes of both inputs long
array3 db 20 dup('$')
main:
; Set the value of ds
mov ax, @data
mov ds, ax
; Display first message
mov ah, 09h
mov dx, offset msg1
int 21h
; Get first input
mov ah, 0ah
mov dx, offset tsize1
int 21h
; Display second message
mov ah, 09h
mov dx, offset msg2
int 21h
; Get second input
mov ah, 0ah
mov dx, offset tsize2
int 21h
; Copy first string
; Loop uses cx register
mov cx, 0 ; So clean it up first
mov cl, asize1 ; Put actual size of first input in cl
; | cx | |
; | 0 | 7 |
; | ch | cl |
; The value of cx is same as value of cl now
mov si, offset array1 ; Offset of first byte of first input is moved in si
mov di, offset array3 ; Offset of first byte of new string is moved in di ; Here the loop starts
start1:
mov al, [si] ; Copy the value at the address of si in al (one byte)
mov [di], al ; Copy this value at the address of di from al
inc si ; Move to next byte of source
inc di ; Move to next byte of target
loop start1
; loop subtracts 1 from cx and checks if its zero. Zero means break the loop
; So, the loop appears to run cx times which has number of characters in first input
; First string copied, start the second
mov cx, 0
mov cl, asize2
mov si, offset array2 ; Start copying from first byte of second string
; But the target remains the same
start2:
mov al, [si]
mov [di], al
inc si
inc di
loop start2
; Copy complete
; Display message
mov ah, 09h
mov dx, offset msg3
int 21h
; Display the string
mov dx, offset array3
int 21h
; Exit
mov ah, 4ch
int 21h
end main
No comments:
Post a Comment