Model driven engineering (MDE) is an approach to software engineering and is used more and more in both research and practice. It provides a higher level of abstraction and supports domain specific languages (DSLs). There is much research done on the static aspects of MDE and most examples deal with static models. However DSLs are also used more and more to model the behaviour of a specific domain. These DSLs often lack clear and formal semantics. Some approaches have been taken to define the semantics of modelling languages. These approaches differ in their pragmatic and formal aspects. None of these approaches are built upon the existing formalism of Structural Operational Semantics (SOS). SOS specifies the semantics of a language based on rules. These rules define a transition system in which the states are extended ASTs. This research adapts SOS in such a way that it can be applied on MDE models instead of ASTs. SOS seems to be a good candidate for specifying the semantics of modelling languages because it is based on the structure of programs which are well defined in a metamodel of a modelling language. The main contribution of this thesis consists of a Semantic Language, SemLang, which is based on SOS. The Semantic Language is defined using an MDE approach: SemLang is defined as a metamodel. It closely resembles SOS but has some differences that make it suitable for defining the semantics of a DSL based on metamodels. A SemLang model is a set of rules that defines a transition system where the states are extended models. SemLang has constructs to deal with lists and graph structures. The Semantic Language is formalized by altering the existing formalizations of SOS. Another result of this research is a tool which supports simulating and debugging of models given their semantics description in SemLang. The tool is built upon the Eclipse framework and provides a graphical user interface. As a proof of concept we apply our approach on some simple functional and imperative languages. We also show that this approach can be used on DSLs like Activity Diagrams and Petri Nets.