精华内容
下载资源
问答
  • 汇编 do while循环

    2017-02-06 14:37:00
    do while生成的汇编代码  do while汇编还原成C++代码 一、 do while成生的汇编代码 // int i=0; // do // { // i++; // } while (i<=10); // return 0; //00401003 |. 51 PUSH ECX ...
    do while生成的汇编代码
     do while汇编还原成C++代码
     
    一、 do while成生的汇编代码
     
    //	int i=0;
    //	do 
    //	{
    //		i++;
    //	} while (i<=10);
    //	return 0;
    //00401003  |.  51            PUSH ECX                                 ;  int i;
    //00401004  |.  C745 FC 00000>MOV DWORD PTR SS:[EBP-4],0               ;  i=0;
    //0040100B  |>  8B45 FC       /MOV EAX,DWORD PTR SS:[EBP-4]            ;  eax=i;
    //0040100E  |.  83C0 01       |ADD EAX,1                               ;  eax++
    //00401011  |.  8945 FC       |MOV DWORD PTR SS:[EBP-4],EAX            ;  i++;
    //00401014  |.  837D FC 0A    |CMP DWORD PTR SS:[EBP-4],0A             ;  i<=10
    //00401018  |.^ 7E F1         \JLE SHORT dowhile.0040100B
    
    	//int j=10,i=0;
    	//do 
    	//{
    	//	i++;
    	//	printf("do while \n");
    	//} while (i<j);;
    
    	//printf("for begin\n");
    	//for (i=0;i<=j;i++)
    	//{
    	//	printf("do for");
    	//}
    	二、 do while汇编还原成C++代码
    
        int a=1;
    	do 
    	{
    		a++;
    	} while (a<=10);
    	printf("begin for");
    	int b=1;
    	for (;b<=10;b++)
    	{
    		
    	}
    	printf("end for");
    

     

    知识点:
    
     while循环分析
     while循环与for循环
    
    一、while循环生成的汇编代码
       while(条件)
       {
       }
    二、while循环转换成等价for循环
        int i=0;
    	while(i<20)
    	{
    		i++;
    	}
    
    	printf("for begin");
    与上边的while语句等价
        int j=0;
    	for (;j<20;)
    	{
    		j++;
    	}
    

     

    转载于:https://www.cnblogs.com/whzym111/p/6370249.html

    展开全文
  • 汇编语言实现while循环

    千次阅读 2019-04-12 17:59:40
    初始化循环变量ecx->跳到条件判断处->如果条件满足则跳到入口(entry),...str_ byte "while-repeat",0ah, 0 .code main proc mov ecx,1 jmp testLab entry: ; pushad invoke printf , offse...

    初始化循环变量ecx->跳到条件判断处->如果条件满足则跳到入口(entry),否则继续向下执行(即退出循环)。

    include vcIO.inc
    
    .data
    
    str_ byte "while-repeat",0ah, 0
    .code
    main proc
    
    mov ecx,1
    jmp testLab
    entry:
    ;	
    	pushad
    	invoke printf , offset str_
    	popad	
    ;	
    	inc ecx
    testLab:
    	cmp ecx, 5
    	jbe entry
    
    	invoke _getch
    
    
    ret
    main endp
    end main
    
    展开全文
  • c语言中提供多种循环结构,即do-while while for,汇编中没有响应指令提供这三种循环 但是可以使用条件测试和跳转进行组合起来 以实现上述三种循环效果, 大多数汇编会根据一个循环的do-while来产生代码,但是实际c...

    c语言中提供多种循环结构,即do-while while  for,汇编中没有响应指令提供这三种循环

    但是可以使用条件测试和跳转进行组合起来 以实现上述三种循环效果,

    大多数汇编会根据一个循环的do-while来产生代码,但是实际c代码中相对较少用到这种循环,

    这时其它的循环会转化为do-while形式,然后在编译为机器代码


    do

    body-statement

    while (test-expr)


    do-while循环至少会执行一次body-statement

    而当将其翻译成goto语句如下:

    loop:

    body-statement

    t = test-expr;

    if ( t )

    goto

    c代码:完成1到N的累加

    int fact_do(int n)
    {
    int result = 1;
    do{
    result += n;
    n = n-1;
    
    }while(n > 1)
    return nresult;
    }
    汇编代码:
    movl 8(%ebp), %edx//将n  %edx寄存器中
    movl $1, %eax//初始result
    .L2:
    addl %edx, %eax//相当于result += n
    subl $1, %edx//n减一
    cmpl $1, %edx//测试条件
    jg .L2//决定是否退出循环

    while循环翻译到汇编上和do-while是很相似的 

    while的通用形式:

    while(test-expr)

    body=statement

    在执行第一次循环之前对test-expr进行测试

    而将while翻译为汇编有很多种方式一种常见的方法使用条件分支进行第一次循环前的条件测试

    当通过了第一次条件测试之后相当于进入do-while循环

    if(!test-expr)

    goto done;

    do

    body-statement

    while(test-expr)

    done:

    若将其翻译为goto语句代码则与do-while循环相差的仅仅是if处的分支

    将上面do-while改为while型循环 这里只贴出汇编代码

    movl 8(%ebp), %edx//将n  %edx寄存器中
    movl $1, %eax//初始result
    cmpl $1, %edx//执行do-while前的条件测试
    jle .L3//如果第一次执行前的条件测试没有通过将跳过循环(不进入)
    .L2:
    addl %edx, %eax//相当于result += n
    subl $1, %edx//n减一
    cmpl $1, %edx//测试条件
    jg .L2//决定是否退出循环
    .L3:


    for循环

    for(init-expr;test-expr;update-expr)

    body-statement

    c语言标准说明(有一个例外),for循环与下面的while循环代码的行为相同

    init-expr;

    while(test-expr)

    {

    body-statement

    update-expr;
    }

    综上所述,c语言中三种形式的循环 for while do-while都可以用一种简单的策略来翻译,即产生一个或多个条件分支的代码。

    条件转移为循环 翻译成机器代码提供了基本机制

    也就是说for循环转化为汇编前经过

    for-->whle-->do-while-->goto-->汇编

    在c语言中执行continue语句会导致程序跳到当前循环迭代的结尾。这时将for翻译成while需要进行一些改进

    而解决方法是使用goto语句跳过while中余下的代码而到达update部分

    例如

    int sum = 0

    int i;

    for(i = 0; i< 10; i++)

    {

    if(i&1)

    continue;

    sum +=i;
    }

    for更改后的while代码

    int sum = 0

    int i = 0;

    while(i<10)

    {

    if(i&1)

    goto update;//将此处continue更改为goto

    sum +=i;

    update:

    i++
    }






    有不足或者错误的地方希望可以在下面回复 谢谢!


    展开全文
  • .section .data .output: .ascii "%d\n\000" .section .text .global main main: mov ip, sp stmfd sp!, {fp,ip,lr,pc} sub fp, ip, #4 sub sp, sp, #80 @memory and register ... mov...
    .section .data
    .output: 
    	.ascii "%d\n\000"
    .section .text
    	.global main
    main: 
    	mov ip, sp  
    	stmfd sp!, {fp,ip,lr,pc}  
    	sub fp, ip, #4 
    	sub sp, sp, #80 
    
    	@memory and register
    
    	mov r3, # 1 
    	mov r0,r3
    		
    loop: 
    	cmp r0,# 15
    	bge stop 
    	mov r1,# 1  
    	add r2, r0, r1 
    	mov r0, r2 
    	
    	@保护现场
    	str r0, [fp,#-16]	
    	
    	str r0,[fp,# -20 ] 
    	ldr r0, =.output  
    	ldr r1,[fp,# -20 ] 
    	bl printf  
    	
    	@恢复现场
    	ldr r0,[fp,#-16]
    
    	b loop   
    stop:
    	ldmea fp, {fp,sp,pc}  
    

      

    转载于:https://www.cnblogs.com/fistao/p/3811800.html

    展开全文
  • 1.do-while循环 2.while循环 3.for循环 1.do-while循环 do body-statement while (test-expr) ; 效果:重复执行 body-statement, 对七est-expr 求值,如果求值的结果为非零, 则继续循环。可以看到, body-s 七...
  • 我们来看下面的例子: ... 我们将上一篇中for循环的例子改为while循环,然而生成的汇编代码却是一模一样的,这里就不在赘述了。有兴趣的朋友请查看《C语言汇编代码分析(for循环)》。   ...
  • gcc会把while循环转换成如下格式的代码,再生成汇编代码: if (循环条件不成立) goto done do { 表达式 … }while(循环条件)   done: ...   示例1: int loop_while(int a...
  • arm64汇编篇-11循环while、for

    千次阅读 2018-06-07 12:03:45
    while循环 创建工程-&gt;main函数页面写入以下代码: void func(){ int nSum = 0; int i = 0; while (i &lt;= 100){ nSum = nSum + 1; i++; } } 2.真机编译将得出的mach-O文件放入ida64中解析...
  • arm汇编--循环

    千次阅读 2014-04-14 18:29:44
    本文介绍了在汇编中进行循环的三种方法 第三种算是比较常用的方法 但是比较繁琐 第一种运用arm关键字while进行循环
  • C语言提供了好几种循环结构,即while、for和do-while。汇编语言中并没有相应的指令存在,作为替代,将条件测试和跳转组合起来实现循环的效果。...do-while循环 其通用形式是这样的: do body-statem...
  • gcc会把do-while循环转换成如下形式的代码,再生成汇编代码: loop: 表达式 … t = 循环条件 if(t)   goto loop   示例1: int dw_loop(int x, int y, int n) {   do{  ...
  • for循环与while循环的区别和联系

    千次阅读 2016-02-24 15:39:56
    C/C++中的for循环代码和while循环代码在GCC中生成的汇编代码在经过优化之后是相同的。即,两者在表达能力上是等价的。 (二)不同点 1.循环条件 for循环的循环条件一般是循环变量(i、j、k)。 while循环的循环条件...
  • for循环和while循环的区别

    万次阅读 多人点赞 2018-04-17 00:03:13
    }区别:控制条件语句的变量,在for循环结束后,就不可以被访问了,而while循环还可以访问,如果你继续想使用该变量,则可以使用while循环,否则推荐使用for循环,原因是for循环结束,该变量就从内存中...
  • 汇编循环语句

    2020-03-04 16:26:49
    今天看了《加密与解密》循环语句部分,接下来将从do-while循环while循环,for循环三个方面去学习循环的汇编。 0x01 do-while循环 do-while循环的流程是:先执行语句块,在进行表达式判断,当表达式为真时,在继续...
  • 单元二 PHP开发基础 2.6 流程控制结构;do-while语法格式;知识应用举例;常见问题;小结练习;主讲张俊晖
  • 目录 ... 概述 MIPS汇编实现循环汇编,主要实现C语言中的三类语句: if-else分支语句 while-for循环语句 switch-case分支选择 if-else while-for switch-case ...
  • 汇编语言实现for循环

    千次阅读 2019-04-12 17:46:10
    先跳进条件判断处,根据是否满足条件跳到入口或继续执行 include vcIO.inc .data str_ byte "repeating",10, 0 ;Variable names cannot be called "str" .code main proc ... invoke ...
  • C语言汇编循环语句

    2020-02-25 21:27:47
    今天讲的是C语言在的while循环语句。 一、while语句 while(i <= 5) { sum = sum + i; i++; } 1、代码示例 while利用 i 作为循环条件,不断地进行 sum 求和。 #include "stdafx.h" int main(int argc, ...
  • do-while循环 do-while循环的通用形式如下: do body-statement while(test-expr); -> loop body-statement t = test-expr if(t) goto loop; while循环 while循环的通用形式如下: while(test-...
  • 汇编语言中循环语句的实现

    万次阅读 2016-06-21 15:48:59
    C语言中有许多不同的结构,比如if-else、do-whilewhile、for、swich等等,这些结构的汇编实现都是一层一层在前者的基础上进行构建的。比如if-else是基于jmp命令实现的,do-while是基于if-else的汇编结构的,而...
  • C语言 基础反汇编——for循环

    千次阅读 2015-05-07 12:59:29
    for循环是各种编程语言中常用的语句;其基本的格式为: for (循环变量 ; bool 表达式; 操作) {  // TODO ... ...以下编写一个简单的C程序,完成从0 加到 某个数的和运算,并分析其反汇编代码。 /* au
  • 在VS2010、Keil、IAR平台下从汇编角度分析了for和while循环的效率
  • 用汇编的眼光看C++(之循环流程)

    千次阅读 2011-09-09 22:15:17
    【 声明:版权所有,欢迎转载,请勿用于商业... 循环是我们编程中遇到的另外一项重要技术。通过反复的迭代运算,我们可以获取想要的任何结果。当然这种迭代是有基本条件的,或是以时间为条件的,或是以空间为条件的,
  • ARM汇编循环

    千次阅读 2009-12-06 14:06:00
    ARM汇编循环求和,使用ADS1.2。 AREA Block,CODE,READONLY i equ 10 ;定义循环次数 ENTRY ;入 mov r0,#i ;次数 mov r1,#0 ;放和 myLoop
  • while机制: 5: int a=5; 00401268 mov dword ptr [ebp-4],5 6: while(a>1) 0040126F cmp dword ptr [ebp-4],1 00401273 jle main+30h (00401280) //??????? 7: { 8: a--; 00401275 mov eax,dword ptr [ebp-4] ...
  • 单片机有锁存为啥子还需要while循环简单的说就是:为了保证程序的可靠性,或者叫健壮性;如果我输出了零,那么就一直是零,但是为了保证程序的可靠性,或者叫健壮性,应该重复输出0,使用while循环就是为了保证...
  • 同样是无限循环,for和while所执行的汇编指令差的还是挺多的,所以这里使用for(;;)就不足为怪了 c文件获取到汇编代码指令:gcc -S test.c 您觉得是不是这方面的区别呢?欢迎各路大神围观留言,北京骑行爱好者...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,751
精华内容 14,300
关键字:

如何用汇编写while的循环