一道微机原理的题求大神给个答案

在8086系统中,存储单元的20位物理地址是通过将16位的“段基值”左移4位再加上16位的“段内偏移量”而生成的。试问:
(1)当取指令时,8086所选择的段基值和偏移量分别来自哪一个寄存器?
(2)当涉及堆栈操作时,8086所选择的段基值和偏移量又分别来自哪一个寄存器?
(3)当涉及一个存储器操作数时,8086会自动选择哪一个寄存器的值作为段基值?