Одной функцией языка, которую я считаю несколько скрытыми, потому что я никогда не слышал об этом в течение моего всего времени в школе, является псевдоним пространства имен. На это не обратили мое внимание, пока я не столкнулся с примерами его в документации повышения. Конечно, теперь, когда я знаю об этом, можно найти его в любой стандартной ссылке C++.
namespace fs = boost::filesystem;
fs::path myPath( strPath, fs::native );
Как говорится в некоторых других ответах, ключевое слово смещение
относится к смещению от сегмента, в котором оно определено. Обратите внимание, однако, что сегменты могут перекрываться, и смещение в одном сегменте может быть другим в другом сегменте. Например, предположим, что у вас есть следующий сегмент в реальном режиме
data SEGMENT USE16 ;# at segment 0200h, linear address 2000h
org 0100h
foo db 0
org 01100h
bar db 0
data ENDS
. Ассемблер видит, что foo
находится со смещением 0100h
от основания SEGMENT
, поэтому везде, где он видит смещение foo
, он помещает значение 0100h
, независимо от значения DS
в то время.
Например, если мы изменим DS
на что-то другое, кроме основания сегмента данных , ассемблер предполагает:
mov ax, 200h ; in some assemblers you can use @data for the seg base
mov ds, ax
mov bx, offset foo ; bx = 0100h
mov byte ptr [bx], 10 ; foo = 10
mov ax, 300h
mov ds, ax
mov bx, offset foo ; bx = 0100h
mov byte ptr [bx], 10 ; bar = 10, not foo, because DS doesn't match what we told the assembler
Во втором примере DS
равно 0300h
, таким образом, основание сегмента, на которое указывает DS
, равно 03000h
. Это означает, что ds: [offset foo]
указывает на адрес 03000h + 0100h
, который совпадает с 02000h + 01100h
, который указывает на bar.
.
Это просто означает адрес этого символа. Это немного похоже на оператор & в C, если вы с ним знакомы.
смещение
означает, что регистр si
будет равен смещению переменной значение1 (а не ее фактическому значению). Смещение - это адрес от начала сегмента памяти, в котором хранится переменная. Смещение обычно относится к сегменту ds
(в вашем случае регистры ds
и cs
указывают на один и тот же сегмент).
В 16-битном режиме x86 адресное пространство не является плоским; вместо этого адреса состоят из смещения и «сегмента». «Сегмент» указывает на пространство размером 64 КБ, смещение находится внутри этого пространства.