Aunque la pregunta no tiene nada que ver con adsl, voy a intentar responderte. Un número es primo si solo es divisible por si mismo y por la unidad. Esto significa que al dividirlo solo puede dar resto cero en esos dos casos. El algoritmo para ver si un número es primero consiste en dividirlo por todos los anteriores (sin incluir ni uno ni cero) para ver si alguno da resto cero. Si ninguno da resto cero es primo. No se qué entiendes por lenguaje máquina, depende del procesador. En lenguaje ensamblador existe la instrucción DIV que permite dividir dos número obitendo el resultado y el resto. No necesitas hacer restas sucesivas. La instrucción DIV funciona de la siguiente forma: DIV BL -> Se realiza AX / BL = AL, con rexto en AH DIV BX -> Se realiza DX:AX / BX = AX, con resto en DX Como ves, no es muy complicado, divides el número en AX por el número en BL si este último es de 8 bits (hasta 255). Si es mayor, tienes que cargarlo en un registro de 16 bits, y entonces cargas el número que quieres dividir en DX:AX, en DX los bits de la parta alta, y en AX los de la parte baja. Intenta hacerlo de esta forma. Si no consigues hacerlo o necesitas usar restas por algo en especial, dímelo.