Вам стоит почитать об указателях.
Размер массива очень даже важен.
Вы создаёте массив, а затем пишите данные по указателю на массив с некоторым смещением. Фактически ничто не мешает вам писать что угодно и куда удобно (в пределах памяти, доступной вашей программе) и ничего вам за это не будет. В данном случае вы нагло пишите данные по указателю (который указывает на данные в области .data). данная область памяти значительно больше 1 байта и все, что вы туда записали будет храниться в ней. Проблема заключается в том, что массив имеет длину лишь 1 байт, а значит вы пишите в память, которая не принадлежит данной переменной/массиву, а принадлежит какой-то другой переменной и тем самым изменяете значение этой переменной.
Заведите вторую переменную, скажем, mas2 чуть большего размера (главная, чтобы линковщик положил ее после mas.) И заполните ее каким-то полезными данными, а затем выполните свой код заполнения двумерного массива и распечатайте оба массива.
Также можете попробовать создать массив в динамической памяти размером 1 байт, а потом заполнить своим кодом двумерный массив размера так 100х100 и получить классический SEGFAULT от операционной системы.
К сожалению, уместить в 1 байт целый массив нельзя, а может оно и к лучшему.