Procedures and macros allow code to be reused in assembly language programs. Procedures are subroutines that are called using CALL and RET instructions. Macros allow short, repetitive code sequences to be defined once and reused by replacing the macro call with its body code. Some key differences are that procedures occupy less memory than macros since macro code is generated each time, while procedures' code is only stored once. Procedures are accessed using CALL while macros are accessed by name.