In principle multitexturing is as simple as performing multiple texture fetches in the pixel shader and then blending the two colors together using some formula (average, min, max, etc).
For greatest control you can use multiple UV coordinates (using TEXCOORD0, TEXCOORD1, etc) and having multiple textures set to the effect, but you can also use a single UV coordinate and simply scale it when working with terrain, especially if you generate the terrain.
A quick search on "hlsl multitexturing" gave me this tutorial which might be a good start for you.
I need it so that 1 part of my terrain has a certain texture and the
only part needs a completely different texture. Not mixing 2 textures
Assuming your textures are both 128x128 what you can do is make a new image that is 256x128 (or 256x256), copy your first texture into the (top) left part of the new image, and the second texture into the right part.
Now you modify your UV coordinates on the mesh, the parts that want the first texture get their U halved (so it goes into the left part of the 256x128 texture) and the ones that want the second texture are halved and get 0.5 added (so it goes into the right part of the combined texture).
Your terrain should now render with 2 textures. You may notice some artefacts where you go from one to the other texture, this can be fixed by duplicating the vertices at the seam, so that the triangle that wants the left texture does not share any vertices with the triangle that want the right texture.
This wouldn't be referred to as multitexturing, seeing as how your only using one texture (which just happens to be a texturemap with multiple textures in it).
To solve it with actual multitexturing you would use two Vector3 UV coordinates, the z component would be used for weight, two textures (which can be your original two textures) and then a hlsl pixel shader that blends the two.
Since you can chose the weight of both textures you can chose to make a quick transition by changing z from 0 to 1 and vice versa for the second texture. This option has the benefit of allowing you to slowly blend textures in places when you want to, but the drawback of requiring a special shader which does twice the work of the single texture one (in terms of texture fetches).
float4 col1 = tex2d(texture1, uv1.xy)
float4 col2 = tex2d(texture2, uv2.xy)
float4 color = (col1 * uv1.z) + (col2 * uv2.z) / (uv1.z + uv2.z)
You can also split the mesh into multiple parts, this allows you to use the same textures as in the multitexturing version, with the same shader as in the single texture version. But requires two draw calls instead of a single draw call.
Simply go through each vertex and if it needs the first texture, add it to the first mesh, and if it needs the second vertex, add it to the second mesh. Make sure that the edge vertices, between the two textures, are duplicated so that you do not get any holes in your terrain.
This is the simplest option, but making a texturemap would have better performance and multitexturing would be more flexible (such as going from all grass to gravel can be done smoothly instead of having a sharp line, where you chose to do so)