当前位置: 首页 > news >正文

wordpress模板建站数据服务网站开发

wordpress模板建站,数据服务网站开发,电子网站设计,网站建设杭州哪家便宜任何一门高级编程语言#xff0c;就一定存在下面这几个语法元素 变量类型数组控制语句#xff08;条件#xff0c;循环#xff09;运算符#xff08;算术运算#xff0c;布尔运算#xff0c;赋值运算#xff0c;关系运算#xff0c;位运算#xff09;函数 而本节探…任何一门高级编程语言就一定存在下面这几个语法元素 变量类型数组控制语句条件循环运算符算术运算布尔运算赋值运算关系运算位运算函数 而本节探究的是这6个语法元素在CPU的眼中是什么样子的呢我们先来看看变量。 说到变量我们的先从内存说起为了方便管理整个内存被划分为一块一块的我们把这样一块的内存叫做内存单元通常情况下一块内存单元的大小为一个字节我们需要给这些内存单元编号从0开始而这个编号有个专门的名字叫做内存地址。CPU比较偏爱内存地址因为知道内存地址就可以操作对应的内存单元。但是我们并不喜欢内存地址因为内存地址是一串数字没有任何可读性于是我们映入变量的概念变量就是这块内存单元的别名。一个比较合适的类比变量与内存地址的关系和域名与IP地址的关系一样。比如下面这两段代码 #include stdio.h int main() {int a 1;return 0; }main:push rbpmov rbp, rspmov DWORD PTR [rbp-4], 1 ; 这里就是 int a 1;mov eax, 0pop rbpret接下来我们来谈谈类型类似其实有两个作用对于我们开发者而言必要的类型检验可以帮我我们减少代码错误。对于CPU而言类型指定了操作数的大小。比如下面这两段代码 #include stdio.h int main() {int num1 1;long num2 100;return 0; }main:push rbpmov rbp, rspmov DWORD PTR [rbp-4], 1 ; int num1 1;mov QWORD PTR [rbp-16], 100 ; long num2 100;mov eax, 0pop rbpretDWORD 表示操作4个内存单元QWORD 表示操作8个内存单元 基本上每个编程语言都提供了数组这个基础的数据结构为什么呢因为现实世界需要因为有这样的需求。通常意义上数组是存储多个同类型的数据结构这意味这他的内存结构是连续的。所以对于CPU而言他不过是一块连续的内存单元而已。 控制语句可以说是编程语言的灵魂全部的程序都是由条件语句循环语句这样像搭积木一样搭建出来的。而这些控制语句在CPU的眼中不过是几条固定的指令。 #include stdio.hint main() {int a 10;int b 9;if (a b) {printf(a more than b);}else {printf(b more than a);} }.LC0:.string a more than b .LC1:.string b more than a main:push rbpmov rbp, rspsub rsp, 16mov DWORD PTR [rbp-4], 10mov DWORD PTR [rbp-8], 9mov eax, DWORD PTR [rbp-4]cmp eax, DWORD PTR [rbp-8]jle .L2mov edi, OFFSET FLAT:.LC0mov eax, 0call printfjmp .L3 .L2:mov edi, OFFSET FLAT:.LC1mov eax, 0call printf .L3:mov eax, 0leaveret可以发现控制语句对应的指令就是 jxx 循环语句也是一样的只不过不是跳转的位置不是往后而是往前。 #include stdio.hint main() {int sum 0;for (int i 0; i 100; i) {sum i;} }main:push rbpmov rbp, rspmov DWORD PTR [rbp-4], 0mov DWORD PTR [rbp-8], 0jmp .L2 .L3:mov eax, DWORD PTR [rbp-8]add DWORD PTR [rbp-4], eax ; sum i;add DWORD PTR [rbp-8], 1 ; i .L2:cmp DWORD PTR [rbp-8], 100 ; i 100;jle .L3mov eax, 0pop rbpret高级语言中的运算符就更加不用说了不过是一些运算指令。到此编写一个程序所需要的全部语法在CPU层面都已经解构完毕了而函数不过是一种让程序模块化的最基本的手段。方便我们在编写庞大复杂的程序时能够更加简单更加灵活。那么函数在CPU的眼中是什么样子的呢 函数的出现让变量的生命周期也叫作用域有了区别函数内部的变量会随着函数的调用而创建函数的返回而销毁。这样做的目的是充分利用内存。接下来我们通过一个例子来看看函数是如何被调用的又是如何被返回的。 #include stdio.hint f1(int num) {int max 100;return num max; }int main() {int init 10;int res f1(init);return 0; }f1:push rbpmov rbp, rspmov DWORD PTR [rbp-20], edimov DWORD PTR [rbp-4], 100mov edx, DWORD PTR [rbp-20]mov eax, DWORD PTR [rbp-4]add eax, edxpop rbpret main:push rbpmov rbp, rspsub rsp, 16mov DWORD PTR [rbp-4], 10mov eax, DWORD PTR [rbp-4]mov edi, eaxcall f1mov DWORD PTR [rbp-8], eaxmov eax, 0leaveret可以发现调用函数会使用call指令这个指令的作用是将下一条的指令入栈然后跳转到f1代码段在每个函数的开头都有这两行指令push rbp mov rbp, rsp 这两条指令的作用是先保存上一个函数的栈帧起点然后重置栈帧的起点为当前的栈顶即创建一个新的栈帧。然后再存放局部变量。然后函数结束pop rbp ret 执行这两条指令rbp寄存器回到上一个函数的栈帧的起点ret指令让指令寄存器IP回到调用函数的位置继续执行。 到此相信你一定有所体会CPU很呆板只会按照我们写好的指令一条一条的执行。我们可以看到比较高级的语法例如函数调用其实不是CPU本身就支持而是我们通过一些额外的指令让CPU可以做到函数调用而这些额外的指令都是编译器生成的。所以我们常常说一个语言是否支持某种语言特性取决于它的编译器。
http://www.w-s-a.com/news/396765/

相关文章:

  • 房地产怎么做网站推广建立音乐网站
  • 川畅科技联系 网站设计网站开发的教学视频
  • 为什么学网站开发凡科登陆
  • 设计师常备设计网站大全中山精品网站建设信息
  • 杭州建设工程网seo服务是什么
  • 兼职做问卷调查的网站wordpress mysql设置
  • 怎么在百度上能搜到自己的网站山西seo谷歌关键词优化工具
  • 网站搭建免费模板飞鱼crm下载
  • 网站开发竞品分析app制作公司深圳
  • 网站建设ssc源码修复设计班级网站建设
  • 网站重定向凡科做网站不要钱
  • 佛山html5网站建设微信营销软件破解版
  • 网站单页做301南京百度推广
  • 私人做网站要多少钱展芒设计网页
  • 怎样网站制作设计如何在网上推广农产品
  • 做关键词排名卖网站聚名网
  • 吉林省住房城乡建设厅网站首页体育器材网站建设方案
  • 网站建设及维护专业手机金融界网站
  • 常州网站建设工作室建立网站有怎么用途
  • 如何盗取网站推广策划书模板
  • 游戏网站建设计划书网络开发需要学什么
  • 手机网站维护费网站开发包括网站过程
  • 懂做游戏钓鱼网站的网站建设技术的发展
  • 网站被百度收录百度一下你就知道 官网
  • 雅客网站建设做网站用什么做
  • 做宣传海报网站专业网站设计速寻亿企邦
  • 秦皇岛市住房和城乡建设局网站有关网站开发的参考文献
  • 晋城城乡建设局网站深圳外贸业务员工资
  • 招聘网站开发的公司销售运营主要做什么
  • 徐州网站无障碍建设wordpress证书