Me parece que no son exactamente lo mismo, pero los docentes lo pueden tomar como correcto, según el teórico cuando se usa BX ó SI el segmento por defecto es Data Segment (DS), y el la letra dice los punteros son desplazamientos dentro de ES, entonces me parece que hay que indicar que el registro de segmento donde esta BX es ES, sino como dice el teórico por defecto se asume DS.
Luego:
cmp word ptr es:[bx + 2], 0 // if (nodo → izq != NULL)
La primer observación que hago acá son, los tipos de argumentos de los operandos son "m" e "i" (memoria, e inmediato), la operación está adimensionada, por eso usa el word ptr es:[bx + 2] para comparar cosas de igual tamaño. En el otro caso (CMP BX, 0) no usa word ptr porque la operación toma la dimensión del registro, osea 16 bits, los tipos de argumentos son "r" e "i" (registro, inmeditato) por eso no usa word prt. De todos modos, creo tendría que ir así: "cmp word ptr es: [bx], 0" por lo comentado arriba con respecto al segmento por defecto.
Con respecto a los que Santiago, no estoy de acuerdo, en mi opinión el puntero al nodo izquierdo esta en ES:[BX+3] y no en la posición es:[bx+2].
Estaría bueno que algún profesor responda que es lo correcto a realizar.
Pd: Hay varias soluciones con detalles o errores, en mi opinión en el examen de Dic 2017 lo correcto debería ser "cmp word ptr es:[bx], 0", como en la solución de Julio 2017.
Saludos.