Я подозреваю (не спец по nasm), что инструкция
sub [num1], dword num2
делает не то, что вы хотите. Скорее всего dword num2 берет адрес num2, так как в x86 нет опкода "вычесть из числа по адресу ___ число по адресу ___", только вычитание константы.
Вам нужно что-то типа:
mov ebx, [num1]
mov ecx, [num2]
sub ebx, ecx