- 浏览: 2084404 次
- 性别:
- 来自: 厦门
-
文章分类
- 全部博客 (1409)
- asp/asp.net学习 (241)
- oracle (10)
- delphi (295)
- java (27)
- pb (1)
- 每日点滴 (49)
- 学习方法 (40)
- 思想方面 (104)
- C语言 (5)
- C++ (1)
- 代码重构经验 (5)
- 软件工程 (3)
- 数据库 (99)
- 英语学习 (3)
- mysql (1)
- 该关注的网站或者网页 (42)
- 总结 (7)
- 要去做的事情 (33)
- 算法 (1)
- 网络方面 (29)
- 随感 (96)
- 操作系统 (36)
- UML (12)
- 常用工具的使用 (55)
- 脚本 (7)
- 汇编 (62)
- 数据结构 (2)
- 财务 (38)
- 语文作文 (16)
- 法律 (1)
- 股票 (88)
最新评论
-
devwang_com:
可以,学习了~~
列出文件夹下所有文件夹的树形结构--Dos命令 tree的使用 -
hvang1988:
不管用啊 frxrprt1.PreviewForm.Pare ...
fastReport预览时嵌入到别的窗体 -
00915132:
我也有这个疑问,非常 感 谢
left join加上where条件的困惑 --SQL优化 -
zhuyoulong:
学习了,高效读书
软件架构师要读的书 -
nTalgar:
非常感谢分享!
Application.ProcessMessages用法:
转:http://blog.csdn.net/mindview/archive/2008/03/17/2192878.aspx
1、if-then
if-then语句的通用形式为:
if (test-expr)
then-statement
else
else-statement
这里的test-expr是整型表达式,它的取值为0或者为非0。
if-then语句对应的汇编实现形式为:
t = test-expr;
if (t)
goto true;
else-statement
goto done;
ture:
then-statement
done:
下面通过一个例子说明:
/* $begin absdiff-c */
int absdiff(int x, int y)
{
if (x < y)
return y - x;
else
return x - y;
}
/* $end absdiff-c */
查看gcc生成的汇编代码可以看到如下代码:
movl 8(%ebp), %edx ;x->edx
movl 12(%ebp), %eax ;y->eax
cmpl %eax, %edx ;x-y
jge .L2 ;if(x>=y) then goto .L2
popl %ebp ;reset frame pointer
subl %edx, %eax ;then-statement(take care!)
ret ;return (always put the return value in eax)
.p2align 4,,7 ;why? I don't know!
.L2: ;else-part
popl %ebp ;reset frame pointer
subl %eax, %edx ;else-statement
movl %edx, %eax
ret ;return
2、do-while
do-while语句的通用形式为:
do
body-statement
while(test-expr);
注意:body-statement至少执行一次。
该语句对应的汇编实现形式为:
loop:
body-statement
t = test-expr;
if(t)
goto loop;
下面通过一个例子加深理解:
/* $begin fibdw-c */
int fib_dw(int n)
{
int i = 0;
int val = 0;
int nval = 1;
do {
int t = val + nval;
val = nval;
nval = t;
i++;
} while (i < n);
return val;
}
/* $end fibdw-c */
查看其对应的汇编代码如下:
subl $16, %esp ;for local variables:t->nval->val->i
movl $0, -16(%ebp) ;i = 0
movl $0, -12(%ebp) ;val = 0
movl $1, -8(%ebp) ;nval = 1
.L2:
movl -8(%ebp), %eax ;nval->eax
addl -12(%ebp), %eax ;val+nval->eax
movl %eax, -4(%ebp) ;eax->t
movl -8(%ebp), %eax ;nval->eax
movl %eax, -12(%ebp) ;eax->val
movl -4(%ebp), %eax ;t->eax
movl %eax, -8(%ebp) ;eax->nval
addl $1, -16(%ebp) ;i++
movl -16(%ebp), %eax ;i->eax
cmpl 8(%ebp), %eax ;i-n
jl .L2 ;if (i<n) then goto .L2
movl -12(%ebp), %eax ;return val
3、while语句
while语句的通用形式为:
while(test-expr)
body-statement
直接翻译成使用goto语句的形式为:
loop:
t = test-expr;
if(!t)
goto done;
body-statement
goto loop
done:
由于这样的翻译要求内循环,大多说c编译器将这段代码转换成do-while循环。
t = test-expr
if(!t)
goto done;
loop:
body-statement
t = test-expr;
if(t)
goto loop;
done:
或者:
goto L
loop:
body-statement
L:
t = test-expr
if(t)
goto loop
举个例子:
/* $begin fibw-c */
int fib_w(int n)
{
int i = 1;
int val = 1;
int nval = 1;
while (i < n) {
int t = val+nval;
val = nval;
nval = t;
i++;
}
return val;
}
/* $end fibw-c */
对应的汇编代码如下:
subl $16, %esp ;for local variables:t->nval->val->i
movl $1, -16(%ebp) ;i = 1
movl $1, -12(%ebp) ;val = 1
movl $1, -8(%ebp) ;nval = 1
jmp .L6
.L7: ;body-statement
movl -8(%ebp), %eax ;nval->eax
addl -12(%ebp), %eax ;nval+val->eax
movl %eax, -4(%ebp) ;eax->t
movl -8(%ebp), %eax ;nal->eax
movl %eax, -12(%ebp) ;eax->val
movl -4(%ebp), %eax ;t->eax
movl %eax, -8(%ebp) ;eax->nval
addl $1, -16(%ebp) ;i++
.L6:
movl -16(%ebp), %eax ;i->eax
cmpl 8(%ebp), %eax ;i-n
jl .L7 ;if(i<n) goto .L7
movl -12(%ebp), %eax ;return value
4、for语句
for语句的通用形式为:
for(init-expr;test-expr;update-expr)
body-statement
for语句的语义可以用while语句表示:
init-expr;
while (test-expr) {
body-statement
update-expr;
}
这样就可以根据前面的while语句的翻译来实现for语句的翻译:
init-expr;
goto L;
loop:
body-statement
update-expr;
L:
t = test-expr;
if(t)
goto loop
for example:
/* $begin fibf-c */
int fib_f(int n)
{
int i;
int val = 1;
int nval = 1;
for (i = 1; i < n; i++) {
int t = val+nval;
val = nval;
nval = t;
}
return val;
}
/* $end fibf-c */
对应汇编代码:
subl $16, %esp ;for local variables
movl $1, -12(%ebp) ;val=1
movl $1, -8(%ebp) ;nval=1
movl $1, -16(%ebp) ;init-expr
jmp .L16 ;goto L
.L17:
movl -8(%ebp), %eax ;body-statement starts
addl -12(%ebp), %eax
movl %eax, -4(%ebp)
movl -8(%ebp), %eax
movl %eax, -12(%ebp)
movl -4(%ebp), %eax
movl %eax, -8(%ebp) ;body-statement ends
addl $1, -16(%ebp) ;update-expr
.L16:
movl -16(%ebp), %eax ;if(i<n) goto .L17
cmpl 8(%ebp), %eax
jl .L17
movl -12(%ebp), %eax ;reture val
5、switch语句
switch语句提供了根据一个整型索引值进行多重分支的能力。它不但提供了c代码的可读性,而且使用一种称为跳转表的数据结构使得实现更加高效。下面通过例子说明:
/* $begin switch-c */
int switch_eg(int x)
{
int result = x;
switch (x) {
case 100:
result *= 13;
break;
case 102:
result += 10;
/* Fall through */
case 103:
result += 11;
break;
case 104:
case 106:
result *= result;
break;
default:
result = 0;
}
return result;
}
/* $end switch-c */
这个程序不用说,谁都看的懂,下面主要看它所对应的汇编代码:
movl 8(%ebp), %eax ;x->eax
leal -100(%eax), %edx ;x-100->edx
cmpl $6, %edx ;if(x-100>6) goto .L2(default case)
ja .L2
jmp *.L7(,%edx,4) ;redirect jump to .L7+4*edx(goto .L7[edx])
.section .rodata
.align 4
.align 4
.L7:
.long .L3 ;case 100
.long .L2 ;default case
.long .L4 ;case 102
.long .L5 ;case 103
.long .L6 ;case 104
.long .L2 ;default case
.long .L6 ;case 106
.text
.p2align 4,,7
.L2: ;default case
popl %ebp ;result = 0;
xorl %eax, %eax
ret
.L3: ;case 100
popl %ebp ;result *= 1300 => result = 1300
movl $1300, %eax
.p2align 4,,6
ret
.L6: ;case 104,106
imull %eax, %eax ;result = result^2
popl %ebp
.p2align 4,,4
ret
.L5: ;case 103
popl %ebp ;result += 11
movl $114, %eax
.p2align 4,,4
ret
.L4: ;case 102
popl %ebp ;result += 10
movl $123, %eax ;result += 11
.p2align 4,,4
ret
其中.L7执行的内存空间内存放的就是跳转表,它是一个数组,表项i(.L2--.L6)是一个代码段的地址,这个代码实现的是当开关索引值等于i时程序应该采取的动作。程序代码用开关索引值来执行一个跳转表内的数组引用,确定跳转指令的目标。和使用很长的if-else语句相比,使用跳转表的优点是执行开关语句的时间与开关情况的数量无关。GCC根据开关情况的数量和开关情况值的稀疏程度来翻译开关语句。当开关情况数量比较多,并且值的范围跨度比较小时,就会使用跳转表。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mindview/archive/2008/03/17/2192878.aspx
发表评论
-
用汇编写的病毒代码
2010-05-29 08:04 1938转自:http://www.programfan.com ... -
堆和栈(堆栈)的区别
2010-05-20 16:47 888转自:http://www.360doc.com/sho ... -
OllyDBG 入门系列(三)-函数参考
2010-05-06 14:07 1425转自:http://bbs.pediy.com/s ... -
OllyDBG 入门系列(二)-字串参考
2010-05-05 19:02 1180转自:http://bbs.pediy.com/s ... -
用汇编编写DOS下的内存驻留程序(5)
2010-05-05 11:05 1051转自:http://www.x86asm.com/Dis ... -
用汇编编写DOS下的内存驻留程序(4)
2010-05-05 11:04 1191转自:http://www.x86asm.com/Displa ... -
用汇编编写DOS下的内存驻留程序(3)
2010-05-05 11:03 920转自:http://www.x86asm. ... -
用汇编编写DOS下的内存驻留程序(2)
2010-05-05 11:02 791转自:http://www.x86asm. ... -
用汇编编写DOS下的内存驻留程序(1)
2010-05-05 11:01 1524转自:http://www.x86 ... -
补码 左移与右移 32位系统
2010-05-02 11:04 2827QQ:797801 计算机中 ... -
调试windows程序
2010-03-21 10:11 844debug 只能支持1M的寻址 如果需要调 ... -
ds:[bp+2]
2009-11-28 13:22 926mov ax,0 mov ds ... -
程序的起始地址的段地址
2009-11-26 09:38 1349生成EXE之后用Debug加载后,查看寄存器内容如下: ... -
将内存FFFF:0--FFFF:b单元中的数据复制到0:200--0:20b单元中
2009-10-25 21:13 1722该程序的功能: 将内存FFFF:0--FF ... -
标志寄存器
2009-10-25 18:46 1017方便记忆 OF 溢出(是/否) ... -
安全的一段内存空间 0:2000~0:02FF
2009-10-25 18:20 972看到120页了 我们要向内存里写东西 ... -
显示红心的汇编代码
2009-10-25 18:05 950assume cs:code code segment ... -
debug时 遇到loop 指令
2009-10-25 17:35 936debug时 遇到loop 指令 用 p指 ... -
Loop的使用
2009-10-23 21:06 1241看到107页了 王爽汇编第五章 Loop的使用 ... -
王爽汇编的第四章的一个小例子--待验证
2009-10-20 21:02 1198第四章的一些总结: 1. DOS系统是单任 ...
相关推荐
apache-jmeter-5.6.3 带插件
内置源程序供读者参考学习
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
MATLAB设计的图像去雾设计(GUI界面设计)
2023年江苏省计算机二级考试VB试题分类汇总及答案.pdf
Java 项目,仅供学习参考。 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4
2023年微型计算机原理试题库及答案.pdf
美联储在2024年9月18日宣布将其调50个基点,降至4.75%至5.00%之间的水平。这是美联储自2020年3月以来首次降息,也是自2023年7月将利率水平调升至历史高位后的首次下调,标志着货币政策由紧缩周期向宽松周期的转向 数据名称:美国联邦基金有效利率、目标利率历史数据 样本数量:12667条 数据年份:1990.1-2024.9 数据说明:包括有效利率、目标利率 更新日期:2024年9月
2023年专升本计算机基础习题答案.pdf
ava项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
Java 项目,仅供学习参考。 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
Java 项目,仅供学习参考。 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
【工程项目】MATLAB教室人数统计(GUI框架,定位和分割人脸,计数)
2023年山东专升本计算机真题及答案.pdf
2023年计算机与通信网络实验报告.pdf
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
英飞凌TC264代码-uart