Scrum is an agile project management methodology. It does not address the practices required to create "goods" of any kind, but instead gives us the process that will take us from the inception of a vision to the final product, regardless of the actual development process. The Scrum process doesn't tell you how to create quality. It shows you what the quality is, where your problems are, and challenges you to fix them.
Extreme programing is an agile software development methodology. It gives us a process with which to create software in an agile and productive way. It deals with, though doesn't specialize in the management of the development process, and focuses mostly on the engineering practices required to deliver software, with quality.
When adopting Scrum for the purpose of software development, the engineering practices are imported from an agile software development practices, most often from XP. These practices, are those that can be adopted in a manner that is decoupled from the rest of the development practices. Most often, these practices are: Test-Driven Development, Refactoring, & Pair Programming, and User Stories, though by no means are these required in Scrum, or the only way to do things (just highly recommended). Agile Modeling is another common source of agile engineering practices.
So in short, when mixing Scrum and XP, which is by far the most common mix, you use all of Scrum's management artifacts, e.g. Sprints, daily Scrums, retrospectives, burn down charts, and so on, and add XP's TDD, refactoring, pair-programming and JIT design via User Stories.
Of course, Scrum being Scrum, this is how you start, and you constantly adapt (refactor, if you will) the process to answer your organization's specific needs.