Кто подскажет, что как можно получить значение регистра DS - PullRequest
0 голосов
/ 11 августа 2011

В исходном коде uc / os я не мог понять следующий код.

* stk = _DS;

Это комментарии, чтобы получить текущую стоимость DS.

Можете ли вы сказать мне, почему?

Ответы [ 2 ]

4 голосов
/ 11 августа 2011

Почти наверняка компилятор распознает _DS как особую "переменную" и вместо извлечения содержимого этой переменной из того места, где хранятся переменные, он просто использует содержимое регистра сегмента данных напрямую.

Другими словами, a = b может быть скомпилировано как:

mov  ax, [0x12341234] // assuming b is at this location.
mov  [0x56785678], ax // assuming a is at this location.

, тогда как a = _DS может быть:

push ds               // or, if available: mov ax, ds
pop ax
mov  [0x56785678], ax // assuming a is at this location.
2 голосов
/ 11 августа 2011

Это макрос, определенный компилятором (я предполагаю, что это только из-за имени в верхнем регистре). Ведущий _ обычно говорит, что это зависит от компилятора. Поэтому, как только препроцессор запустится, он вставит свой собственный код, который по существу вернет текущее значение DS.

...