Crap I forgot to reply to your PM >>;;
Yes, the a/0/1/6 narc is what contains the TM/HM. The way it works in the hex is that near the end of each Pokémon's data in the narc there's a string of hex numbers that represent the TM/HM compatibility. The first byte represents TMs 1 - 8, the second 9 - 16, etcetera in groups of 8. Once you reach 80, it goes 81 - 88, then 89 - HM01 since there is no 96. The final one is HM02 - HM06.
These hex numbers represent binary digits; if for example you took a random Pokemon's first TM hex and converted it to binary you might get a string like 01101010. The important thing to note is that it's in REVERSE; that is, the first digit there represents TM8, not 1, and it drops down as you go right. Then the next byte, once converted to binary, has digits representing it in the order 16-9 and so on.
In that example - 01101010 - that means the Pokemon would be able to learn TM07, TM06, TM04 and TM02 because all of those are represented with a 1. The other four TMs are not learnable by the Pokémon due to being represented by a 0. It's the same for all of them, although of course the final one will only have five digits as only five things are represented.
There's two ways you can figure out new things; stick the binary combo you want in the Windows calc, convert it to hex and put it in or you can do it manually via converting between base 16/base 2. Let's use an example 00000000, representing TM89 - HM01. The first byte hence represents HM01. Now if we want to make the Pokémon learn HM01, we change the string to 10000000. It's an unsigned byte so it goes between 0 - 255. The value of a binary number doubles each time you go to the left, as it's multiplied by 2 each time. As such, that string is equal to 128 in decimal, which is also equal to 2^7. So you figure out 128 in hex (128 / 1.6 = 80) so you put 80 as the hex value, and that means the Pokemon will learn HM01 but none of the other moves in that string.
Say you wanted 10000001, letting it learn TM89 as well. The least significant bit here represents 1, hence the total is 128 + 1 = 129. This is also transferred to hex by 80 + 01, hence you would put in 81 for the correct setup. If you wanted 10000101, that'd be 128 + 4 + 1 = 133, or 80 + 01 + 04, which means you'd put in 85, and so on and so forth.
I probably went a bit further than I had to with that but that covers some of the basics for anyone unfamiliar with hex. Of course, that's the archaic method, and using that tool and transferring the narc over will work just as well.