这篇教程C++ EmitLn函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中EmitLn函数的典型用法代码示例。如果您正苦于以下问题:C++ EmitLn函数的具体用法?C++ EmitLn怎么用?C++ EmitLn使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了EmitLn函数的27个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: Addvoid Add(){ Match('+'); Term(); EmitLn("addl (%esp), %eax"); EmitLn("addl $4, %esp");}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:7,
示例2: DoForvoid DoFor() { char L1[100]; char L2[100]; Match('f'); strcpy(L1, NewLabel()); strcpy(L2, NewLabel()); char Name = GetName(); Match('='); Expression(); EmitLn("dec rax"); sprintf(tmp, "mov qword [%c], rax", Name); EmitLn(tmp); Expression(); EmitLn("push rax"); PostLabel(L1); sprintf(tmp, "mov rax, qword [%c]", Name); EmitLn(tmp); EmitLn("inc rax"); sprintf(tmp, "mov qword [%c], rax", Name); EmitLn(tmp); EmitLn("cmp rax, qword [rsp]"); sprintf(tmp, "jg %s", L2); EmitLn(tmp); Block(); Match('e'); sprintf(tmp, "jmp %s", L1); EmitLn(tmp); PostLabel(L2); EmitLn("add rsp, 8");}
开发者ID:A-deLuna,项目名称:crenshaw-c-x86_64-compiler,代码行数:33,
示例3: DoWhilevoid DoWhile(void){ char code[MAXMSG]; char l1[MAXLBL]; char l2[MAXLBL]; Match('w'); NewLabel(); strncpy(l1, label, MAXLBL); NewLabel(); strncpy(l2, label, MAXLBL); PostLabel(l1); BoolExpression(); snprintf(code, MAXMSG, "je .%s", l2); EmitLn(code); Block(l2); Match('e'); // ENDWHILE printf("#ENDWHILE/n"); snprintf(code, MAXMSG, "jmp .%s", l1); EmitLn(code); PostLabel(l2);}
开发者ID:Harnesser,项目名称:LetsBuildACompiler,代码行数:26,
示例4: DoIfvoid DoIf(){ Condition(); char L1[MAX_BUF]; char L2[MAX_BUF]; strcpy(L1, NewLabel()); strcpy(L2, L1); sprintf(tmp, "jz %s", L1); EmitLn(tmp); Block(); if (Token == 'l') { /* match *else* statement */ strcpy(L2, NewLabel()); sprintf(tmp, "jmp %s", L2); EmitLn(tmp); PostLabel(L1); Block(); } PostLabel(L2); MatchString("ENDIF");}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:28,
示例5: Subtractvoid Subtract() { Match('-'); Term(); EmitLn("pop rbx"); EmitLn("sub rax, rbx"); EmitLn("neg rax");}
开发者ID:A-deLuna,项目名称:crenshaw-c-x86_64-compiler,代码行数:7,
示例6: BoolXorvoid BoolXor(){ Match('~'); BoolTerm(); EmitLn("xor (%esp), %eax"); EmitLn("addl $4, %esp"); /* recover the stack */}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:7,
示例7: DoDovoid DoDo(void){ char code[MAXMSG]; char l1[MAXLBL]; char l2[MAXLBL]; Match('d'); NewLabel(); strncpy(l1, label, MAXLBL); NewLabel(); strncpy(l2, label, MAXLBL); // exit point printf("# DO/n"); Expression(); // expr1 = repeat count EmitLn("pushl %eax/t/t# repeat count"); PostLabel(l1); Block(l2); EmitLn("popl %ecx"); EmitLn("dec %ecx"); EmitLn("pushl %ecx"); // test snprintf(code, MAXMSG, "jnz .%s", l1); EmitLn(code); Match('e'); // ENDWHILE printf("#ENDDO/n"); PostLabel(l2);}
开发者ID:Harnesser,项目名称:LetsBuildACompiler,代码行数:31,
示例8: Greatervoid Greater() { Match('>'); Expression(); EmitLn("cmp rax, [rsp]"); EmitLn("setle al");}
开发者ID:A-deLuna,项目名称:crenshaw-c-x86_64-compiler,代码行数:7,
示例9: DoIfvoid DoIf(char *exit_label){ char code[MAXMSG]; char l1[MAXLBL]; char l2[MAXLBL]; Match('i'); printf("# IF/n"); NewLabel(); strncpy(l1, label, MAXLBL); strncpy(l2, label, MAXLBL); BoolExpression(); snprintf(code, MAXMSG, "je .%s", l1); EmitLn(code); printf("# TRUE/n"); // here, tutorial 05 only matches 'e' once, after the if statement // this doesn't seem to work unless i add Look=='l' to the test in // Blocks(). Block(exit_label); if (Look=='l') { Match('l'); printf("#ELSE/n"); NewLabel(); strncpy(l2, label, MAXLBL); snprintf(code, MAXMSG, "jmp .%s", l2); EmitLn(code); PostLabel(l1); Block(exit_label); } Match('e'); // ENDIF printf("#ENDIF/n"); PostLabel(l2);}
开发者ID:Harnesser,项目名称:LetsBuildACompiler,代码行数:35,
示例10: Subtractvoid Subtract(){ Match('-'); Term(); EmitLn("subl (%esp), %eax"); EmitLn("negl %eax"); EmitLn("addl $4, %esp");}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:8,
示例11: Multiplyvoid Multiply(){ Match('*'); Factor(); EmitLn("imull (%esp), %eax"); /* push of the stack */ EmitLn("addl $4, %esp");}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:8,
示例12: Greatervoid Greater(){ Match('>'); Expression(); EmitLn("cmp %eax, (%esp)"); EmitLn("setg %al"); EmitLn("addl $4, %esp"); /* recover the stack */}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:8,
示例13: NotEqualsvoid NotEquals(){ Match('#'); Expression(); EmitLn("cmp (%esp), %eax"); EmitLn("setne %al"); EmitLn("addl $4, %esp"); /* recover the stack */}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:8,
示例14: Dividevoid Divide() { Match('/'); Factor(); EmitLn("mov rbx, rax"); EmitLn("pop rax"); EmitLn("cqo"); EmitLn("idiv rbx");}
开发者ID:A-deLuna,项目名称:crenshaw-c-x86_64-compiler,代码行数:8,
示例15: Lessvoid Less(){ Match('<'); Expression(); EmitLn("cmp %eax, (%esp)"); EmitLn("setl %al"); EmitLn("addl $4, %esp"); /* recover the stack */}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:8,
示例16: Headervoid Header() { EmitLn("extern printf"); EmitLn("extern scanf"); EmitLn("section .data"); printf("fmt: db /"%%d/", 10, 0/n"); printf("fmtin: db /"%%d/", 0/n");}
开发者ID:A-deLuna,项目名称:crenshaw-c-x86_64-compiler,代码行数:8,
示例17: Assignmentvoid Assignment(){ char c = GetName(); Match('='); BoolExpression(); sprintf(tmp, "lea %c, %%ebx", c); EmitLn(tmp); EmitLn("movl %eax, (%ebx)");}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:9,
示例18: Equalsvoid Equals(){ Match('='); Expression(); EmitLn("cmp (%esp), %eax"); /* Note that 80386 has setcc corresponds to 86000's SETCC * However, it only takes 8-bit registers */ EmitLn("sete %al"); EmitLn("addl $4, %esp"); /* recover the stack */}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:10,
示例19: BoolTermvoid BoolTerm() { NotFactor(); while (Look == '&') { EmitLn("push rax"); Match('&'); NotFactor(); EmitLn("and rax, [rsp]"); EmitLn("add rsp, 8"); }}
开发者ID:A-deLuna,项目名称:crenshaw-c-x86_64-compiler,代码行数:10,
示例20: BoolTermvoid BoolTerm(){ NotFactor(); while(Look == '&') { EmitLn("pushl %eax"); Match('&'); NotFactor(); EmitLn("and (%esp), %eax"); EmitLn("addl $4, %esp"); }}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:11,
示例21: BoolFactorvoid BoolFactor(){ if (IsBoolean(Look)) { if (GetBoolean()) { EmitLn("movl $-1, %eax"); } else { EmitLn("xor %eax, %eax"); } } else { Relation(); }}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:12,
示例22: Identvoid Ident() { char Name = GetName(); if(Look == ('(')) { Match('('); Match(')'); sprintf(tmp, "call %c", Name); EmitLn(tmp); } else { sprintf(tmp, "mov rax, [%c]", Name); EmitLn(tmp); }}
开发者ID:A-deLuna,项目名称:crenshaw-c-x86_64-compiler,代码行数:12,
示例23: Identvoid Ident(){ GetName(); if (Look == '(') { Match('('); Match(')'); sprintf(tmp, "call %s", Value); EmitLn(tmp); } else { sprintf(tmp, "movl %s, %%eax", Value); EmitLn(tmp); }}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:13,
示例24: BoolFactorvoid BoolFactor() { if(IsBoolean(Look)) { if(GetBoolean()) { EmitLn("mov rax, -1"); } else { EmitLn("xor rax, rax"); } } else { Relation(); }}
开发者ID:A-deLuna,项目名称:crenshaw-c-x86_64-compiler,代码行数:13,
示例25: Relationvoid Relation() { Expression(); if (IsRelop(Look)) { EmitLn("push rax"); switch(Look) { case '=': Equals(); break; case '#': NotEquals(); break; case '<': Less(); break; case '>': Greater(); break; } EmitLn("add rsp, 8"); EmitLn("cmp rax, 0"); }}
开发者ID:A-deLuna,项目名称:crenshaw-c-x86_64-compiler,代码行数:14,
示例26: CleanStack/* Adjust the stack pointer upwards by n bytes */void CleanStack(int bytes){ if (bytes > 0) { sprintf(tmp, "addl $%d, %%esp", bytes); EmitLn(tmp); }}
开发者ID:A-deLuna,项目名称:Let-s-build-a-compiler,代码行数:8,
示例27: Assignmentvoid Assignment() { char Name = GetName(); Match('='); BoolExpression(); sprintf(tmp, "mov [%c], rax", Name); EmitLn(tmp);}
开发者ID:A-deLuna,项目名称:crenshaw-c-x86_64-compiler,代码行数:7,
注:本文中的EmitLn函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ EmitSound函数代码示例 C++ EmitBYTE函数代码示例 |