一、函数调用总体框图如下:
二、C语言函数如下:
int sum(int x,int y) { int s; s = x + y; return s; } int foo(void) { int m = 2; int n = 3; int k; k = sum(m,n); return k; }
三、对应的汇编代码如下图:
四、解释如下:
1、程序把esp的老值先压入堆栈,然后把esp赋值给ebp,ebp不变,esp变化。
2、esp=esp-12,这样做是为了放入局部变量。程序往ebp-4和ebp-c分别存入3和2,留ebp-8的位置存 以后计算出来的两数和。
3、压入堆栈参数2和3,此时esp又减了8。call指令把返回地址压入堆栈。
4、子函数先把上面的EBP的值压入堆栈,把把esp赋值给ebp,ebp不变,esp变化。
5、又一条无效的指令把ecx压入堆栈,此时esp又减了12。用bp+8和bp+12娶到局部变量,相加后复制给eax。
6、把ebp赋给esp,之后把上面ebp的值恢复(pop bp),ret指令把返回地址。
7、esp=esp+8,因为调用子函数时压入了两个参数。
8、把ebp赋给esp,之后把再上面ebp的值(图中没有显示)恢复,ret指令把返回地址。
注:红色标注表示图中esp的位置。
最近,由于研发需要,特入手了一台Nexus4手机,16G 美水,未拆封版,价格2658元RMB,顺丰快递,深圳到杭州,昨天中午拍下,今天早上到,速度速度。废话少说,验机步骤如下:
1. 检查包装、机器和附件是否完好
拿到快递,第一件事是检查包装是否完好,黑色封条是否有拆过痕迹。配件和机器有没有使用的痕迹,这些是常识,就不多说了。
2.查看是否有晃动和电流声
拿到机子第一时间,就是查看是否有传说中的晃动声和电流声。轻轻晃动机子,发现有轻微的元器件松动声音,比较轻,完全可以忽略。打电话给朋友,音质不错,没发现有电流声,听音乐,也没有发现传说中的电流声,估计是因为13年2月的机子已经修复了。
3. 检查三码合一
检测,包装盒、手机背面、手机里面(*#06#)的IMEI码是否一致。这个是常识,我就不多说了。
4. 通过IMEI查询手机销售地和生产日期
输入网址:http://csmg.lgmobile.com:9002/svc/popup/model_check.jsp?esn=,等号后面加上15位IMEI码。
比如:http://csmg.lgmobile.com:9002/svc/popup/model_check.jsp?esn=355136050637910 ,则显示:
LGE960AUSGBK355136050637910302KPNY06379120130209USG20130214NGOOGLE_OPEN_16GLG0000504163315
比如:AUSGBK表示销售地US美国,(注意如果你买的是港行的话这里应该显示HK而不是US)
GB代表16G版本,8B代表8G版本
K是黑色。
CA代表加拿大
UK表示英国
MYS是马来西亚
SWS是新西兰
HK是香港
DE是德国
TMO是T-Mobile的机子由于那个
O2U是英国O2运营商的机子
ES是西班牙
生产日期2013/2月9日
出厂日期 2013/2月14日送去美国Google仓库
销售商是Google
5.通过emmc_check确认生产日期:
打开google play,搜索"emmc check",下载eMMC Brickbug check,检查字库时间,一般字库时间比出厂时间早两个月左右是正常的,如果太长则有可能是翻新机器。详细过程请见:点击打开链接
6.检测nfc功能是否完好
下载nfcTest工具并安装,然后,将公交卡靠近手机背面,看是否提示检测到卡,如果找到卡说明nfc功能完好。详细过程请见:点击打开链接
7.下载大量应用软件和游戏测试机器
玩游戏的时候,发现有发热量有点大,使用一般应用程序还好。四核的cpu发热是有点大,不过整体还好,不影响正常使用。目前为止,没有发现什么明显的缺陷。
8. 测试电话和短信
和朋友通电话,发现,音质还好,但是感觉有露音现象,即听筒声音太大,旁边的人能较清楚听到谈话声。这个比较蛋疼,如果和女朋友打电话的话,建议使用耳机了。最后别忘了,和朋友收发短信一下,确保短信功能正常。
9. 测试蓝牙
打开蓝牙,两个机器间传输文件,很快,没问题。
10. 稳定测试
2-3天持续看视频、玩游戏、各种应用软件一起上。如果没出现大问题,既可以确认付款了。
1. 自定义字体
可以使用setTypeface(Typeface)方法来设置文本框内文本的字体,而android的Typeface又使用TTF字体文件来设置字体
所以,我们可以在程序中放入TTF字体文件,在程序中使用Typeface来设置字体:第一步,在assets目录下新建fonts目录,把TTF字体文件放到这里。第二步,程序中调用:
TextViewtv = (TextView)findViewById(R.id.textView);
AssetManagermgr=getAssets();//得到AssetManager
Typefacetf=Typeface.createFromAsset(mgr, "fonts/mini.TTF");//根据路径得到Typeface
tv.setTypeface(tf);//设置字体
效果如下图所示:
2. 显示多种颜色的字
Android支持html格式的字符串,通过调用Html.fromHtml(str)方法可以转换html格式的字符串str。
示例如下:
StringtextStr1 = "<font color=\"#ffff00\">如果有一天,</font><br>";
StringtextStr2 = "<font color=\"#00ff00\">我厌倦了这里,</font><br>";
StringtextStr3 = "<font color=\"#ff00ff\">我会乘着梦,</font><br>";
StringtextStr4 = "<font color=\"#00ffff\">飞向那个属于自己的<br>世界……</font><br>";
tv.setText(Html.fromHtml(textStr1+textStr2+textStr3+textStr4));
运行后效果如下:
3. 字体加粗
在xml布局文件中使用android:textStyle=”bold”可以将英文设置成粗体,但是不能将中文设置成粗体,将中文设置成粗体的方法是:使用TextPaint的仿“粗体”设置setFakeBoldText为true。示例代码如下:
tv.getPaint().setFakeBoldText(true);
效果如下:
4. 添加阴影
在xml布局文件中使用一系列android:shadowXXX属性可添加设置阴影。具体为:shadowColor设置阴影颜色;shadowDx设置阴影水平偏移量;shadowDy设置阴影垂直偏移量;shadowRadius设置阴影半径。
示例代码:
android:shadowColor="#ffffff"
android:shadowDx="15.0"
android:shadowDy="5.0"
android:shadowRadius="2.5"
显示效果如下:
5. 插入图片
插入图片有两种方法,第一种方法就是用上面说的html格式的字符串,不过转换稍微有些麻烦。需要用到ImageGetter类来对图片的src属性进行转换。示例代码如下:
StringimgStr = "<img src=/index.html""+R.drawable.sidai+"\"/>";
Html.ImageGetterimageGetter = new Html.ImageGetter() {
public Drawable getDrawable(Stringarg0) {
// TODO Auto-generated methodstub
int id =Integer.parseInt(arg0);
Drawable draw =getResources().getDrawable(id);
draw.setBounds(10, 10, 228,300);
return draw;
}
};
tv.append(Html.fromHtml(imgStr,imageGetter,null));
第二种方法是使用xml布局文件中一系列android:drawableXXX属性来实现插入图片。具体为:drawableBottom是在文本框内文本的底端绘制指定图像;drawableLeft是在文本框内文本的左边绘制指定图像;drawableRight是在文本框内文本的右边绘制指定图像;drawableTop是在文本框内文本的顶端绘制指定图像;drawablePadding设置文本框内文本与图像之间的间距。示例代码:
android:drawableBottom=”@drawable/sidai”
插入图片后的显示效果如下:
摘自 北京大学-Google Android实验室