2015-12-03 42 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程序集,因此被禁止用作標籤。看起來它被偶然地包含在這裏,但是,因爲沒有定義這樣的標籤,並且沒有它的循環顯示完整。