The whole "ASM" part of the question is utterly irrelevant.
All, and by that I mean
all programming languages that can be used on x86 processors, cause x86 "assembly" instructions to be executed because that's
the only language the processor even understands. Higher-level languages, VMs and frameworks are for humans to work with, not for x86 processors.
So please scratch that all.
Access to hardware registers is a definite possibility from C++ and C at least, but even some basic dialects let you do it, and assuming a sane OS it might even be sufficient to dump a string to a specific location in the file hierarchy to access hardware registers more or less directly. No manual assembly hacking is involved in this at all.
The much more relevant part of the question is "What sort of configuration does the hardware expose?" to which the answer is "It varies, but you're expecting much too crazy things". As a rule, if CrystalCPUID or somesuch can do it, it's because the hardware exposed the functionality through some registers. Everything that can be done is usually documented in the processor documentation you can freely access without registration at e,g. amd.com or intel.com.
Some chipsets or specialized stuff used on motherboards (voltage regulators, monitors and similar nuts and bolts) may have their own registers available for futzing around with. Documentation for that is often more obscure, but that's why we have these wonderful people working on these wonderful tools.
Because of the business models of CPU makers, it's generally not possible to increase the multiplier above the one that suffices to reach the advertised clock speed at the advertised bus or reference clock. We know that mainstream AMD CPUs allow lowering the voltages and multiplier through software, and with the FX line the multiplier is unlocked, allowing increases as well. But that's not what you were expecting to hear I guess, because you already should know it if you're a self-esteeming overclocker