The manufacturers of the processors publish detailed manuals that describe the actual machine instruction sets. Often these manufacturers also market assembler programs that can be used to write machine-language software. For popular processors such as the Intel x86 series, you can also find a lot of documentation on the machine language on the Web.
AMD microprocessors for PCs have essentially the same instruction set as Intel's x86, because they have to be compatible with the Intel processors at the machine-language level in order to be useful as competing products for building PCs. AMD still has its own documentation on their own processors, of course. There are a handful of instructions that are specific to Intel's or AMD's processors and are not duplicated by the competition (most software doesn't use these instructions because that would make it impossible to run on both brands of processor).
All assembly languages tend to resemble each other in syntax: one instruction per line, with a first field that is an optional label, a second field that is the instruction op code, and a third field that contains operands for the instruction.
The machine language is the same no matter what OS is used, but real-world machine-language programs run under operating systems and make calls to the OS for various services, so these programs still have to be written with a specific OS in mind, unless they are designed to execute completely independently (in a machine with no OS or anything else).
Try Eric Issacson's A386/D386 assembler and debugger for PC systems. It's small, fast, relatively free-standing, and can generate .COM files (for execution under MS-DOS) or object files for linking with other programs. It's an easy way to do some assembler. Microsoft also has a fancy macro assembler, although I'm not sure if they sell it separately from other products.
Contrary to what some other people here are saying, assembly language is not obsolete. It isn't often used, but for certain specialized applications it is essential, and these specialized applications themselves are essential (such as bootloaders and the like). So it's not common, but it's still alive and well. Many computer specialists today know nothing about assembly language and therefore think it's obsolete (out of sight, out of mind … a bit like mainframes). Working with assembly language gives you a tremendous insight into how the hardware actually works, something you won't get with high-level languages that tend to deliberately hide the details of the hardware.