如何在C程序中用汇编语言编写while循环\ if语句?

时间:2015-12-03 00:11:18

标签: c if-statement assembly while-loop inline-assembly

我正在尝试编写一个程序来读取一个句子并计算大写字母的数量。

具体来说,我试图将下面显示的c代码转换为汇编语言:

scanf("%c", &L );
while(L !='\n')
 {
  if(L>='A' && L<='Z')
    V++;
  scanf("%c", &L);
}

这是我的汇编代码:

  _asm
    {
    call read
    mov V, 0;
    while:  cmp L, '\n'
    je  exit,loop
    cmp L, 'A'
    jl cont
    cmp L, 'Z'
    jg cont
    inc V
    cont: call read
      jmp while
      exit: jmp
}

但是这段代码没有成功运行,因为我不断收到一条错误消息:警告C4405:'loop':标识符是保留字。对不起任何编码错误,我是汇编语言的新手。任何帮助或建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

您获得的错误代码相对简单;你正在使用标识符'loop'作为你的je的(无关的)操作数(跳转相等)。你的最终无条件跳转也需要某种类型的操作数。

 _asm
    {
    call read
    mov V, 0;
    while:  cmp L, '\n'
    je  exit
    cmp L, 'A'
    jl cont
    cmp L, 'Z'
    jg cont
    inc V
    cont: call read
      jmp while
      exit: jmp somewhere
}

标识符'loop'用于x86程序集,因此禁止用作标签。看来它偶然包含在这里,因为没有定义这样的标签,如果没有它,循环就会显示完整。