What you'd need to do is something like the following:
mapFieldMapNew = Schema.getGlobalDescribe().get(sObjectName__c').getDescribe().Fields.getMap();
String key = ' ';
String value = ' ';
mapLabelToFieldsObj = new Map<String,String>();
for(String s : mapFieldMapNew.keySet()) {
key = mapFieldMapNew.get(s).getDescribe().getLabel();
value = mapFieldMapNew.get(s).getDescribe().getName();
if(mapFieldMapNew.get(s).getDescribe().isUpdateable()) mapLabelToFieldsObj.put(key, value);
}
That would give you a map of all the fields in the sObject that are updatable which you could simply convert to a list or set of field names if you wanted to. You could then use those fields to test to see if anything has changed between trigger.new and trigger.old on those fields.
Although it's implicit, don't forget that you also have the isCreatable
attribute for a describe call and could potentially have new records that you'd also want to test for which could exist in trigger.new, but not in trigger.old if your trigger included an afterInsert
section.