1) An assembler translates programs written in assembly language to machine code by translating mnemonic codes to machine code and symbols to addresses. It handles constants, literals, and addressing.
2) An assembler uses two passes. The first pass assigns addresses to lines of code and saves symbol addresses. The second pass translates opcodes, replaces symbols with addresses, and produces the object program.
3) Data structures used include an opcode table for translation, a symbol table for storing and looking up symbol addresses, and a literal table for handling literals.