022.强化训练三

函数的返回值都在EAX中.
64位返回值.

当我们写Windows32位C语言程序的时候.
使用参数和局部变量,能用int,就别用short和char类型.
涉及到一个程序内存对齐.

参数和局部变量没有本质的区别,都是在函数被调用的时候,在栈中分配的.
甚至完全可以把参数当做局部变量使用.

参数是在函数调用前分配的内存.call之前.
局部变量是函数调用时分配的内存.call中.

但是call之后,它们就全从栈中被排除之外了.

int
x= 10;
int y =x+10;
int z =x*y;
int x
=x+y*z

#include<stdio.h>
#include<stdlib.h>
void
test1() {
int l_v1 = 1;
int l_v2 = 2;
int l_v3 = 3;
int l_v4 =
4;
int l_v5 = 5;
}

void test2() {
int l_arr[] = { 1,2,3,4,5 };
int l_v1 = 1;
int
l_v2 = 2;
int l_temp;

l_temp = l_arr[1];
l_temp = l_arr[l_v1];
l_temp = l_arr[l_v1 +
l_v2];
l_temp = l_arr[l_v1 * 2 + l_v2];
l_temp = l_arr[l_arr[1] +
l_arr[2]];
l_temp = l_arr[7];
}

void main() {
__asm {
xor eax, eax;
}

test1();
test2();
}



在被调用的函数中,修改调用者数据的局部变量.

栈是怎么回事.
参数在栈里是如何体现的.
局部变量在栈里是如何体现的.
局部变量数组

全局变量以及全局变量数组
函数运行的时候.
可以使用寄存器
也可以使用栈
当然混合的使用.

在这个Windows 10 VS2015 debug
x86模式生成的C/C++代码.
没有局部变量和数组的时候,缓存区默认大小为192个字节.

当有一个int局部变量的时候,缓存区大小为204个字节
当有一个char局部变量的时候,缓存区大小为204个字节
当有一个short局部变量的时候,缓存区大小为204个字节

当有一个int数组,5个成员,缓存区大小为224个字节.
当有一个char数组,5个成员,缓存区大小为212个字节.
当有一个short数组,5个成员,缓存区大小为216个字节.

如果你使用的变量不够4个字节,也按照4个字节给你在栈中分配.
所以这样子,就不存在一个什么char就比int节约空间.

我们编写的程序是32位.
发挥它的最大允许效率,浪费了一些内存空间.

一步迈50厘米. 有意识的去控制我的走路节奏.

存放一个数字,最大可能就是255
那我们就可以使用一个unsigned char 存放.

int是不是32位,4个字节.

EAX 0x00000000

不管返回值是char 对应着byte 8 al
还是short int 对应着word 16
ax
还是int 对应着dword 32 eax

当我们写一个32位程序,但是返回值是64位的时候.
返回值的高32位EDX中存放着,低32位在EAX存放着

数组

eax=-1
eax=0xFFFFFFFF
1111
edx=0xFFFFFFFFFFFFFFFF

把一个32位有符号数,并且是存放在EAX中,拓展到EDX中,两个合并成64位的一个有符号数.

#include<stdio.h>
#include<stdlib.h>
int f_test() {

return 1;//在这个Windows 10 VS2015 debug x86模式生成的C/C++代码.没有局部变量和数组的时候,缓存区默认大小为192个字节.

}//不管返回值是char 对应着byte8 al还是short int对应着word16 ax还是int 对应着dword 32 eax
void main() {
__asm {
xor eax, eax }
f_test();
}

#include<stdio.h>
#include<stdlib.h>
int test() {
long long int v1 = 0x11223344;
return v1;
}
void main() {
_asm {
xor eax,eax
}
test();
}
//当有一个int局部变量的时候,缓存区大小为208个字节
当有一个char局部变量的时候,缓存区大小为208个字节
当有一个short局部变量的时候,缓存区大小为208个字节
dpq 是拓展高位 整数 拓展都是0 负数拓展都是 1例如 eax是fffff fffff拓展到高位edx ffff ffff

时间: 2024-11-09 03:01:42

022.强化训练三的相关文章

1Python进阶强化训练之装饰器使用技巧进阶

Python进阶强化训练之装饰器使用技巧进阶 如何使用函数装饰器? 实际案例 某些时候我们想为多个函数,统一添加某种功能,比如记时统计.记录日志.缓存运算结果等等. 我们不想在每个函数内一一添加完全相同的代码,有什么好的解决方案呢? 解决方案 定义装饰奇函数,用它来生成一个在原函数基础添加了新功能的函数,替代原函数 如有如下两道题: 题目一 斐波那契数列又称黄金分割数列,指的是这样一个数列:1,1,2,3,5,8,13,21,-.,这个数列从第三项开始,每一项都等于前两项之和,求数列第n项. 题

训练三:求任意整数的降序数

题目要求: 对一个五位的任意整数,求出琦降序数 算法提示:将整数的每一位分离到一维整形数组中,再将数组a的元素按照降序排列,最后输出数组元素值, 试建立一个NUM类,完成上述操作 #include<iostream> using namespace std; class NUM { public: NUM(int x);//定义一个带参数的构造函数 void NUM_fengjie(); void NUM_paixu(); void NUM_display(); private: int a[

2Python进阶强化训练之csv|json|xml|excel高

Python进阶强化训练之csv|json|xml|excel高 如何读写csv数据? 实际案例 我们可以通过http://table.finance.yahoo.com/table.csv?s=000001.sz,这个url获取中国股市(深市)数据集,它以csv数据格式存储: Date,Open,High,Low,Close,Volume,Adj Close 2016-09-15,9.06,9.06,9.06,9.06,000,9.06 2016-09-14,9.17,9.18,9.05,9.

李新海:师徒聊“口才训练三阶段”

昨天和徒弟聊天,他告诉我,他总结了口才训练的三个阶段 一.看山是山,看水是水 外行看热闹,内行看门道,刚开始的时候,口才不好,看见口才好的演讲者,培训师,会很羡慕,会竖起大拇指认可那些高手. 最近特别火的<欢乐喜剧人><笑傲江湖><跨界喜剧王>三个节目来说,90%的人看了节目,哈哈大笑,但是外行始终是外行, 根本不知道对方用了什么技巧,不知道有哪些套路. 而口才演讲,培训讲课,也和这些喜剧节目类似,都是有专业的技巧的.如果不懂,那只能在原地停留. 二.看山不是山,看水不

英语听力训练三原则四个字

什么是听力训练的三原则.四个字呢.三个原则是:有恒,即持之以恒:有序,循序渐进:有量,要有一定数量的听力训练.四个字:3.6.9.什么是3?就是最好每次坚持进行至少30分钟的听力练习.6呢,一个星期,即进行至少6次的听力训练.9是一个层次的听力练习,至少要听够90篇以上的数量,如果条件许可,还可以在此基础上加大训练量.     “有恒”的道理,就不用说了.任何学问的取得,都离不开这个道理.没有恒心,想成就一番事业是不可能的.其实,我们国家很多学英语的人何其多也,但真正学成的,比例很有限,为什么呢

Python强化训练笔记(五)——找出多个字典中的公共键

在这个问题中,我们期望得到的结果是找到这三轮比赛中,每轮都进球的球员都有谁.下面用python来模拟一下,先生成一批数据: >>> from random import randint, sample >>> # sample是取样的意思,例如sample('abcde', 2),会在'abcde'这个字符串中随机抽样2个字符出来 >>> {x: randint(1,3) for x in sample('abcdef', randint(3, 6))

MySql 练习 - 查询强化训练

参考图 1. 创建表 -- 创建班级表 create table class( cid int primary key auto_increment, caption varchar(32) not null )ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 创建学生表 create table student( sid int primary key auto_increment, gender char(1) not null, class_id int not

1101作业:循环强化训练

1 public class Homework01 { 2 public static void main(String[] args) { 3 int a=0,b=0,c=0; 4 System.out.print("3位数的所有水仙花数为:"); 5 for (int i = 100; i < 1000; i++) { 6 a = i / 100;// 百位 7 b = i % 100 / 10;// 十位 8 c = i % 100 % 10;// 个位 9 if (i =

ACM: 强化训练-Roads in the North-BFS-树的直径裸题

Roads in the North Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description Building and maintaining roads among communities in the far North is an expensive business. With this in mind, the roads are build such that the