Method: Wilson::Address#push_mod_rm_on

Defined in:
lib/wilson.rb

#push_mod_rm_on(spareRegister, stream) ⇒ Object



897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
# File 'lib/wilson.rb', line 897

def push_mod_rm_on spareRegister, stream
  if id.nil? then
    stream << (0b00000101 + (spareRegister.id << 3))
    return stream.push_D(offset)
  end

  modrm = case offset
          when 0 then
            0b00000000
          when 1..255 then
            0b01000000
          else
            0b10000000
          end

  if index.nil? then
    modrm += (spareRegister.id << 3)
  else
    stream << (0b00000100 + (spareRegister.id << 3))
    modrm += (index.id << 3)
  end

  stream << modrm + id

  return self if offset == 0
  return stream.push_B(offset) if offset < 256

  stream.push_D offset
end