This document discusses hardware-assisted virtual machines (HVM). It covers the history of virtualization from 1960s to present, virtualization techniques including full virtualization, para-virtualization and direct execution. It then focuses on HVM, how it virtualizes the CPU using AMD-V and VT-x extensions, I/O using AMD-Vi and VT-d, and networking using VT-c. It describes the HVM instructions, data structures including the VMCS region, and how a VMM can initialize, run and handle exits from a virtual machine using HVM. Related works exploring HVM for security applications are also briefly mentioned.