You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently, all labels exist in a global namespace. So labels within subroutines have to be distinctly named so avoid namespace conflicts, and when conflicts do occur, they aren't brought to the user's attention:
subroutine_a: # do_something part_1: # do even more things, then jump back to part_1 b part_1 part_2: jr$rasubroutine_b: # do something part_1: # this clashes with part_1 in subroutine a jr$ra
So when this gets assembled, the b part_1 instruction in subroutine_a causes the PC to jump to part_1 in subroutine_b, because that was where the label was most recently defined. This leads to a lot of insidious bugs.
Other assemblers like NASM have support for sub-labels, marked with a period:
subroutine_a: # do_something .part_1: # do even more things, then jump back to part_1 b part_1 .part_2: jr$rasubroutine_b: # do something .part_1: # this no longer clashes jr$ra
Sub-labels get tied to the most recent label without a period, so this essentially defines an entire new namespace for that label specifically. Additionally, if label name conflicts do occur, this should be a hard error.
The text was updated successfully, but these errors were encountered:
Currently, all labels exist in a global namespace. So labels within subroutines have to be distinctly named so avoid namespace conflicts, and when conflicts do occur, they aren't brought to the user's attention:
So when this gets assembled, the
b part_1
instruction insubroutine_a
causes the PC to jump topart_1
insubroutine_b
, because that was where the label was most recently defined. This leads to a lot of insidious bugs.Other assemblers like NASM have support for sub-labels, marked with a period:
Sub-labels get tied to the most recent label without a period, so this essentially defines an entire new namespace for that label specifically. Additionally, if label name conflicts do occur, this should be a hard error.
The text was updated successfully, but these errors were encountered: