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

How to write a while loop\if statement with assembly language in C program?

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

具体来说,我正在尝试将下面显示的 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':标识符是保留字。对于任何编码错误,我深表歉意,我是汇编语言的新手。任何帮助或建议将不胜感激。

您得到的错误代码相对简单;您正在使用标识符 '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 程序集,因此禁止用作标签。不过,它似乎是偶然包含在这里的,因为没有定义这样的标签,而且没有它循环看起来很完整。