ARM is a RISC (Reduced Instruction Set Computing) architecture while
x86 is a CISC (Complex Instruction Set Computing) one.
The core difference between those in this aspect is that ARM instructions operate only on registers with a few instructions for loading and saving data from / to memory while x86 can operate directly on memory as well. Up until v8 ARM was a native 32 bit architecture, favoring four byte operations over others.
So ARM is a simpler architecture, leading to small silicon area and lots of power save features while x86 becoming a power beast in terms of both power consumption and production.
About question on “Is the x86 Architecture specially designed to work with a keyboard while ARM expects to be mobile?“.
x86 isn’t specially designed to work with a keyboard neither
ARM for mobile. However again because of the core architectural choices actually x86 also has instructions to work directly with
IO while ARM has not. However with specialized IO buses like USBs, need for such features are also disappearing.
If you need a document to quote, this is what Cortex-A Series Programmers Guide (4.0) tells about differences between RISC and CISC architectures:
An ARM processor is a Reduced Instruction Set Computer (RISC) processor.
Complex Instruction Set Computer (CISC) processors, like the x86, have a rich instruction set capable of doing complex things with a single instruction. Such processors often have significant amounts of internal logic that decode machine instructions to sequences of internal operations (microcode).
RISC architectures, in contrast, have a smaller number of more general purpose instructions, that might be executed with significantly fewer transistors, making the silicon cheaper and more power efficient. Like other RISC architectures, ARM cores have a large number of general-purpose registers and many instructions execute in a single cycle. It has simple addressing modes, where all load/store addresses can be determined from register contents and instruction fields.
ARM company also provides a paper titled Architectures, Processors, and Devices Development Article describing how those terms apply to their bussiness.
An example comparing instruction set architecture:
For example if you would need some sort of bytewise memory comparison block in your application (generated by compiler, skipping details), this is how it might look like on
repe cmpsb /* repeat while equal compare string bytewise */
ARM shortest form might look like (without error checking etc.)
top: ldrb r2, [r0, #1]! /* load a byte from address in r0 into r2, increment r0 after */ ldrb r3, [r1, #1]! /* load a byte from address in r1 into r3, increment r1 after */ subs r2, r3, r2 /* subtract r2 from r3 and put result into r2 */ beq top /* branch(/jump) if result is zero */
which should give you a hint on how RISC and CISC instruction sets differ in complexity.