def RSBS(self, params):
        """
        RSBS [Ra,] Rb, #0

        Subtract Rb from zero (0 - Rb) and store the result in Ra
        Set the NZCV flags
        Ra and Rb must be low registers
        if Ra is omitted, then it is assumed to be Rb
        """
        # This instruction allows for an optional destination register
        # If it is omitted, then it is assumed to be Rb
        # As defined in http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0662b/index.html
        try:
            Ra, Rb, Rc = self.get_three_parameters(self.THREE_PARAMETER_COMMA_SEPARATED, params)
        except iarm.exceptions.ParsingError:
            Rb, Rc = self.get_two_parameters(self.TWO_PARAMETER_COMMA_SEPARATED, params)
            Ra = Rb

        self.check_arguments(low_registers=(Ra, Rb))
        if Rc != '#0':
            raise iarm.exceptions.RuleError("Third parameter {} is not #0".format(Rc))
        # RSBS Ra, Rb, #0

        def RSBS_func():
            oper_2 = self.register[Rb]
            self.register[Ra] = 0 - self.register[Rb]
            self.set_NZCV_flags(0, oper_2, self.register[Ra], 'sub')

        return RSBS_func
def RSBS ( self , params ) : try : Ra , Rb , Rc = self . get_three_parameters ( self . THREE_PARAMETER_COMMA_SEPARATED , params ) except iarm . exceptions . ParsingError : Rb , Rc = self . get_two_parameters ( self . TWO_PARAMETER_COMMA_SEPARATED , params ) Ra = Rb self . check_arguments ( low_registers = ( Ra , Rb ) ) if Rc != '#0' : raise iarm . exceptions . RuleError ( "Third parameter {} is not #0" . format ( Rc ) ) def RSBS_func ( ) : oper_2 = self . register [ Rb ] self . register [ Ra ] = 0 - self . register [ Rb ] self . set_NZCV_flags ( 0 , oper_2 , self . register [ Ra ] , 'sub' ) return RSBS_func
RSBS [Ra,] Rb, #0

        Subtract Rb from zero (0 - Rb) and store the result in Ra
        Set the NZCV flags
        Ra and Rb must be low registers
        if Ra is omitted, then it is assumed to be Rb