如何在WebAssembly wast的`.data`节中加载“ Hello World”

时间:2018-07-06 04:35:21

标签: string webassembly

我正在查看WebAssembly tests,并在package co.quindio.sena.navigationdrawerejemplo.adapters; import android.content.Context; import android.content.Intent; import android.os.Parcelable; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; import co.quindio.sena.navigationdrawerejemplo.Gallery; import co.quindio.sena.navigationdrawerejemplo.R; import co.quindio.sena.navigationdrawerejemplo.clases.PersonajeVo; import de.hdodenhof.circleimageview.CircleImageView; /** * Created by CHENAO on 13/07/2017. */ public class PersonajesAdapter extends RecyclerView.Adapter<PersonajesAdapter.PersonajeViewHolder>{ ArrayList<PersonajeVo> listaPersonaje; private Context mContext; public PersonajesAdapter(Context context,ArrayList<PersonajeVo> listaPersonaje) { this.listaPersonaje=listaPersonaje; this.mContext=context; ArrayList<String> mImages = new ArrayList<>(); ArrayList<String>mImageNames = new ArrayList<>(); } @Override public PersonajeViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list,null,false); return new PersonajeViewHolder(view); } @Override public void onBindViewHolder(PersonajeViewHolder holder, final int position) { holder.txtNombre.setText(listaPersonaje.get(position).getNombre()); holder.txtInformacion.setText(listaPersonaje.get(position).getInfo()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, Gallery.class); intent.putExtra("image_url", (Parcelable) listaPersonaje.get(position)); intent.putExtra("image_name", (Parcelable) listaPersonaje.get(position)); mContext.startActivity(intent); } }); } @Override public int getItemCount() { return listaPersonaje.size(); } public class PersonajeViewHolder extends RecyclerView.ViewHolder { TextView txtNombre,txtInformacion; ImageView foto; public PersonajeViewHolder(View itemView) { super(itemView); txtNombre= (TextView) itemView.findViewById(R.id.idNombre); txtInformacion= (TextView) itemView.findViewById(R.id.idInfo); foto= (ImageView) itemView.findViewById(R.id.idImagen); } } } 看到了这一点:

data

想知道将“ Hello World”放入(module (memory $m 1) (data (i32.const 0)) (data (i32.const 1) "a" "" "bcd") (data (offset (i32.const 0))) (data (offset (i32.const 0)) "" "a" "bc" "") (data 0 (i32.const 0)) (data 0x0 (i32.const 1) "a" "" "bcd") (data 0x000 (offset (i32.const 0))) (data 0 (offset (i32.const 0)) "" "a" "bc" "") (data $m (i32.const 0)) (data $m (i32.const 1) "a" "" "bcd") (data $m (offset (i32.const 0))) (data $m (offset (i32.const 0)) "" "a" "bc" "") ) 部分的样子。我是这个低级功能的新手。像这样:

data

在x86汇编中,您可以执行以下操作:

(data "Hello World")

1 个答案:

答案 0 :(得分:1)

您可以在data segment syntax中找到WebAssembly Text Format specification的定义。确实很简单,这里是一个简单的形式:

data $memidx $offset $data

$memidx是一个可选索引,用于指示数据段填充的模块内存。在当前版本的WebAssembly中,仅支持single module memory,因此该值始终为零。

$offset是一个常量表达式,指示应在其中写入数据的起始位置。

最后$data是数据本身。它可以表示文本或二进制数据,并带有简单的编码为detailed in the specification

对于您的示例,将Hello World添加到模块内存中,偏移量为零,这将完成以下工作:

(data (i32.const 0) "Hello World")