Miasm2
 All Classes Namespaces Files Functions Variables Typedefs Properties Macros
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
miasm2.arch.msp430.arch.msp430_sreg_arg Class Reference
+ Inheritance diagram for miasm2.arch.msp430.arch.msp430_sreg_arg:
+ Collaboration diagram for miasm2.arch.msp430.arch.msp430_sreg_arg:

Public Member Functions

def decode
 
def encode
 
def fromstring
 
def check_fbits
 
def fromstring
 

Public Attributes

 expr
 
 value
 
 fmask
 

Static Public Attributes

int prio = default_prio+1
 
 reg_info = gpregs
 
 parser = sreg_p
 

Detailed Description

Definition at line 318 of file arch.py.

Member Function Documentation

def miasm2.core.cpu.reg_noarg.check_fbits (   self,
  v 
)
inherited

Definition at line 666 of file cpu.py.

667  def check_fbits(self, v):
668  return v & self.fmask == self.fbits
669 
def miasm2.arch.msp430.arch.msp430_sreg_arg.decode (   self,
  v 
)

Definition at line 323 of file arch.py.

324  def decode(self, v):
325  size = 16
326  if hasattr(self.parent, 'size'):
327  size = [16, 8][self.parent.size.value]
328  v = v & self.lmask
329  e = self.reg_info.expr[v]
330  if self.parent.a_s.value == 0b00:
331  if e == R3:
332  self.expr = ExprInt(0, size)
333  else:
334  self.expr = e
335  elif self.parent.a_s.value == 0b01:
336  if e == SR:
337  self.expr = ExprMem(ExprInt16(self.parent.off_s.value), size)
338  elif e == R3:
339  self.expr = ExprInt(1, size)
340  else:
341  self.expr = ExprMem(
342  e + ExprInt16(self.parent.off_s.value), size)
343  elif self.parent.a_s.value == 0b10:
344  if e == SR:
345  self.expr = ExprInt(4, size)
346  elif e == R3:
347  self.expr = ExprInt(2, size)
348  else:
349  self.expr = ExprMem(e, size)
350  elif self.parent.a_s.value == 0b11:
351  if e == SR:
352  self.expr = ExprInt(8, size)
353  elif e == R3:
354  if self.parent.size.value == 0:
355  self.expr = ExprInt(0xffff, size)
356  else:
357  self.expr = ExprInt(0xff, size)
358  elif e == PC:
359  self.expr = ExprInt(self.parent.off_s.value, size)
360  else:
361  self.expr = ExprOp('autoinc', e)
362  else:
363  raise NotImplementedError(
364  "unknown value self.parent.a_s.value = " +
365  "%d" % self.parent.a_s.value)
366  return True
def miasm2.arch.msp430.arch.msp430_sreg_arg.encode (   self)

Definition at line 367 of file arch.py.

368  def encode(self):
369  e = self.expr
370  if e in self.reg_info.expr:
371  self.parent.a_s.value = 0
372  self.value = self.reg_info.expr.index(e)
373  elif isinstance(e, ExprInt):
374  v = int(e.arg)
375  if v == 0xffff and self.parent.size.value == 0:
376  self.parent.a_s.value = 0b11
377  self.value = 3
378  elif v == 0xff and self.parent.size.value == 1:
379  self.parent.a_s.value = 0b11
380  self.value = 3
381  elif v == 2:
382  self.parent.a_s.value = 0b10
383  self.value = 3
384  elif v == 1:
385  self.parent.a_s.value = 0b01
386  self.value = 3
387  elif v == 8:
388  self.parent.a_s.value = 0b11
389  self.value = 2
390  elif v == 4:
391  self.parent.a_s.value = 0b10
392  self.value = 2
393  elif v == 0:
394  self.parent.a_s.value = 0b00
395  self.value = 3
396  else:
397  self.parent.a_s.value = 0b11
398  self.value = 0
399  self.parent.off_s.value = v
400  elif isinstance(e, ExprMem):
401  if isinstance(e.arg, ExprId):
402  self.parent.a_s.value = 0b10
403  self.value = self.reg_info.expr.index(e.arg)
404  elif isinstance(e.arg, ExprInt):
405  self.parent.a_s.value = 0b01
406  self.value = self.reg_info.expr.index(SR)
407  self.parent.off_s.value = int(e.arg.arg)
408  elif isinstance(e.arg, ExprOp):
409  self.parent.a_s.value = 0b01
410  self.value = self.reg_info.expr.index(e.arg.args[0])
411  self.parent.off_s.value = int(e.arg.args[1].arg)
412  else:
413  raise NotImplementedError(
414  'unknown instance e.arg = %s' % type(e.arg))
415  elif isinstance(e, ExprOp) and e.op == "autoinc":
416  self.parent.a_s.value = 0b11
417  self.value = self.reg_info.expr.index(e.args[0])
418  else:
419  raise NotImplementedError('unknown instance e = %s' % type(e))
420  return True
421 
def miasm2.core.cpu.m_arg.fromstring (   self,
  s,
  parser_result = None 
)
inherited

Definition at line 604 of file cpu.py.

605  def fromstring(self, s, parser_result=None):
606  if parser_result:
607  e, start, stop = parser_result[self.parser]
608  self.expr = e
609  return start, stop
610  try:
611  v, start, stop = self.parser.scanString(s).next()
612  except StopIteration:
613  return None, None
614  self.expr = v[0]
615  return start, stop
616 

+ Here is the call graph for this function:

def miasm2.core.cpu.reg_noarg.fromstring (   self,
  s,
  parser_result = None 
)
inherited

Definition at line 636 of file cpu.py.

637  def fromstring(self, s, parser_result=None):
638  if parser_result:
639  e, start, stop = parser_result[self.parser]
640  self.expr = e
641  return start, stop
642  try:
643  v, start, stop = self.parser.scanString(s).next()
644  except StopIteration:
645  return None, None
646  self.expr = v[0]
647  return start, stop

Member Data Documentation

miasm2.arch.msp430.arch.msp430_sreg_arg.expr

Definition at line 331 of file arch.py.

miasm2.core.cpu.reg_noarg.fmask
inherited

Definition at line 667 of file cpu.py.

miasm2.arch.msp430.arch.msp430_sreg_arg.parser = sreg_p
static

Definition at line 321 of file arch.py.

int miasm2.arch.msp430.arch.msp430_sreg_arg.prio = default_prio+1
static

Definition at line 319 of file arch.py.

miasm2.arch.msp430.arch.msp430_sreg_arg.reg_info = gpregs
static

Definition at line 320 of file arch.py.

miasm2.arch.msp430.arch.msp430_sreg_arg.value

Definition at line 371 of file arch.py.


The documentation for this class was generated from the following file: