JILK - (6) - 32-Bit and 16-Bit Address and Operand Sizes

来源:互联网 发布:windows 10安装大小 编辑:程序博客网 时间:2024/06/11 03:16

In real-address mode, thedefault addressing and operand size is 16 bits. An address-size overridecan be used in real-address mode to enable 32-bit addressing. However, themaximum allowable 32-bit linear address is still 000FFFFFH. As we know, inreal-address mode, we use 16 bits to represent a segment base address and use16 bits to represent an offset in that segment. Here it may mean that we canuse 32 bits to represent an offset in that segment, so that a segment can coverthe whole 00000000H~000FFFFFH address space in real-address mode.

In protected mode, IA-32processors can be configured for 32-bit or 16-bit address and operand sizes. Here it means that whenusing 32-bit addressing, a logical address (or far pointer) consists of a16-bit segment selector and a 32-bit offset, and when using 16-bit address, anaddress consists of a 16-bit segment selector and a 16-bit offset. So how toconfigure whether to use 32-bit or 16-bit address and operand sizes? That isdepended on the segment descriptor for the currently executing code segment.

In 64-bit mode, flat address space forcode, data, and stacks is used in most cases. So the size of effective address calculations is 64 bits. Aneffective-address calculation uses a 64-bit base and index registers andsign-extend displacements to 64 bits. All 16-bit and 32-bit addresscalculations are zero-extended in IA-32e mode to form 64-bit addresses. Addresscalculations are first truncated to the effective address size of the currentmode ( 64-bit mode or compatibility mode ), as overridden by any address-sizeprefix. The result is then zero-extended to the full 64-bit address width.

原创粉丝点击