@funkheld: Dann würde ich noch mal zur Anmerkung von __deets__ zurück wollen, dass es bessere Sprachen/Umgebungen gibt um sich mit Assembler zu beschäftigen als ausgerechnet Python und da dann auch noch irgendwelche Byte-Blobs selbst in den Speicher zu laden und ausführbar zu machen. Da würde ich ja mindestens mal „shared libraries“, also unter Windows DLLs als Ziel nehmen, weil die sich einfacher in Python, aber auch in andere Programmiersprachen integrieren lassen, und damit dieses Problem und diese Fehlerquelle schon mal weg fällt.
Am einfachsten wäre C und Assembler, weil C im Grunde so etwas wie ein portabler Makroassembler ist, die Schritt von C-Quelltext zu Assembler in der Regel recht offensichtlich und direkt ist (solange man den Compiler keine Optimierungen machen lässt

), und man so auch erst einmal ein bisschen Prototyping in C betreiben kann, bevor man etwas in handgeschriebenen Assembler umsetzt. Mit C muss man sich sowieso bis zu einem gewissen Grad auseinandersetzen, weil die Schnittstellen in der Regel aus Sicht von C-Programmierern ge-/beschrieben sind. So ja auch das `ctypes`-Modul in Python und APIs von DLLs, egal in welcher Programmiersprache die letztlich geschrieben sind. (Wobei ich hier von ”echten” DLLs ausgehe, also welche die nativen Maschinencode enthalten und keinen .NET-Bytecode.)
Und ich würde mich auch erst einmal über ”PC-Assembler” informieren, denn das sind im Grunde drei Sprachen, angefangen mit 16-Bit-Assembler, über 32-Bit-Assembler, bis zu 64-Bit-Assembler. Die Frage nach dem konkreten Buch hattest Du nicht beantwortet, aber ein Buch über 16-Bit-Assembler in einer DOS-Umgebung wird bei 32-Bit oder 64-Bit-Windowsanwendungen nicht so wirklich weiterhelfen. Bei so einem Buch wäre Python sowieso raus, weil man da mit DOS arbeiten müsste/würde. Entweder mit einem echten (Retro-)Rechner, oder in einer virtuellen Umgebung, die so etwas emuliert. VirtualPC, Qemu, Dosbox, … da gibt es ja einiges.