SoUrcerer wrote:
Сам спросил, сам ответил?

Скорее так : подскажите где я торможу.
Mario_r4 wrote:
z525
Так FASM же достаточно ясно написал "undefined symbol". В первом случае ты убираешь метку, а ссылка на нее остается. Во втором же ты убираешь еще и ссылку. Глобальная метка может быть только одна, а ссылок сколько угодно. При наличии самой метки разумеется.
Благодарю за объяснение. Ключевое слово здесь - ссылка.
Но всетаки я еще не совсем до конца понял.
Если взять такой пример:
Code:
;kernel_test.asm
include 'kglobals.inc'
iglobal
align 4
sys_system_table:
dd exit_for_anyone ; 1 = obsolete
dd sysfn_terminate ; 2 = terminate thread
dd sysfn_activate ; 3 = activate window
dd sysfn_getidletime ; 4 = get idle time
dd sysfn_getcpuclock ; 5 = get cpu clock
dd sysfn_saveramdisk ; 6 = save ramdisk
dd sysfn_getactive ; 7 = get active window
dd sysfn_sound_flag ; 8 = get/set sound_flag
dd sysfn_shutdown ; 9 = shutdown with parameter
dd sysfn_minimize ; 10 = minimize window
dd sysfn_getdiskinfo ; 11 = get disk subsystem info
dd sysfn_lastkey ; 12 = get last pressed key
dd sysfn_getversion ; 13 = get kernel version
dd sysfn_waitretrace ; 14 = wait retrace
dd sysfn_centermouse ; 15 = center mouse cursor
dd sysfn_getfreemem ; 16 = get free memory size
dd sysfn_getallmem ; 17 = get total memory size
dd sysfn_terminate2 ; 18 = terminate thread using PID
; instead of slot
dd sysfn_mouse_acceleration; 19 = set/get mouse acceleration
dd sysfn_meminfo ; 20 = get extended memory info
dd sysfn_pid_to_slot ; 21 = get slot number for pid
dd sysfn_min_rest_window ; 22 = minimize and restore any window
sysfn_num = ($ - sys_system_table)/4
endg
sysfn_terminate2:
то здесь я могу удалить метку и никто не будет жаловаться. Я бы понял сообщение об ошибке если бы эта метка гденибудь еще исползовалась но я этого в исходниках не нашел.
И если уж шла речь о ссылках то хотелось бы спросить следущее-правильно ли я понял что если в выше приведенной конструкции (как это правильно назвать не знаю) есть
dd sysfn_terminate2 то это будет ссылкана метку которая существует. А например
dd sysfn_meminfo (в данном примере) просто переменной? И почему
dd (подозреваю что связанно с адресом) ?
признаюсь что сама конструкция
iglobal
...
endgмне тоже до конца не понятна. Я знаю что такое
macro но то что стоит в
kglobals.inc просто жуть.

Если правильно понял то препроцессор собирает все что стоит между этими ключевыми словами и делает это глобально доступным.