2015-12-03 44 views
2

我正在尝试编写一个程序来读取一个句子并计算大写字母的数量。如何在C程序中编写一个while循环 if语句和汇编语言?

具体我想转换如下图所示成汇编语言的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:'循环':标识符是保留字。对于任何编码错误对不起,我是汇编语言的新手。任何帮助或建议将不胜感激。

+2

x86指令集包含'loop',我认为该消息表明该标识符让ibstructuon感到困惑。而且,x86'je'指令将占用一个操作数,而不是两个。 – MikeCAT

+0

另外,在x86中不会有'jmp'指令没有操作数。哪里跳? – MikeCAT

+1

'do {stuff} while(condition)'循环更容易翻译成asm(因为条件已经在底部,所以你不必在循环之前复制它)。因此,如果你的算法在第一次迭代之前不需要测试,那么就这样想。 –

回答

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程序集,因此被禁止用作标签。看起来它被偶然地包含在这里,但是,因为没有定义这样的标签,并且没有它的循环显示完整。