2014-01-13 70 views
-2

我的問題是它不會比較第一個數字是否大於第二個數字。它只執行在這裏我打印我做了一個程序,只會在第一個數字大於第二個數字時纔會添加兩個數字,而不是比較

mov ah,9 
    lea dx,str1 
    int 21h   ;Write string at DS:DX to standard output 

    mov ah,1 
    int 21h   ;Read character from standard input into AL 
    sub al,30h  ;al = character - '0' 
    mov num1,al  ;num = character - '0' 

    mov ah,9 
    lea dx,str2 
    int 21h   ;Write string at DS:DX to standard output 

    mov ah,1 
    int 21h   ;Read character from standard input into AL 

    mov al,2 

    cmp num1,al  ;Is num1 greater than 2? 
    jg sum   ; yes, goto sum 
         ; no 
    mov ah,9 
    lea dx,str3 
    int 21h   ;Write string at DS:DX to standard output 
    jmp exit 


sum: 
    add num1,al  ;num1 = num1 + AL = num1 + 2 

    mov ah,9 
    lea dx,new 
    int 21h   ;Write string at DS:DX to standard output 

    mov ah,9 
    lea dx,num1 
    int 21h   ;Write string at DS:DX to standard output 
    jmp exit 

exit: 
+2

我沒有看到實際的問題,我不知道你在編寫什麼語言,我認爲你的文章的格式需要更多的工作。請修復這些問題,以便我們可以幫助您。 – Alexander

+0

我在彙編語言中使用條件語句..我的問題是,它不會比較第一個數字是否大於第二個數字.. –

+1

那麼你有'cmp num1,al'' jg sum'在那裏,所以CPU可能*是*比較的東西。然而,之前的指令是'mov al,2',所以你似乎將'num1'的值與'2'進行比較,這似乎與你希望代碼執行的描述不符(比較第一個數字到第二個數字)。 –

回答

0

您寫這

cmp num1,al  ;Is num1 greater than 2? 
jg sum   ; yes, goto sum 
        ; no 

您正在CMP聲明的錯意字符串的一部分

正確的意義和聲明(FO R此之情況)是

cmp num1,al  ;Is 2 lesser than num1? 
    jl sum   ; yes, goto sum 
         ; no 

我已經修改您的代碼,現在會是這樣

org 100h 
    jmp start 
    str1 dw 'Provide Input',10,13,'$' 
    str2 dw 'Provide another input',10,13,'$' 
    str3 dw 'First is greater',10,13,'$' 
    new dw 'Second is greater',10,13,'$' 
    num1 db ? 
    start: 
    mov ah,9 

    lea dx,str1 
    int 21h   ;Write string at DS:DX to standard output 

    mov ah,1 
    int 21h   ;Read character from standard input into AL 
    sub al,30h  ;al = character - '0' 
    mov num1,al  ;num = character - '0' 

    mov ah,9 
    lea dx,str2 
    int 21h   ;Write string at DS:DX to standard output 

    mov ah,1 
    int 21h   ;Read character from standard input into AL 
    sub al,30h  ;al = character - '0' 

    cmp num1,al  ;Is al lesser than num1? 
    jl sum   ; yes, goto sum 
         ; no 
    mov ah,9 
    lea dx,str3 
    int 21h   ;Write string at DS:DX to standard output 
    jmp exit 


sum: 
    add num1,al  ;num1 = num1 + AL = num1 + al 

    mov ah,9 
    lea dx,new     
    int 21h   ;Write string at DS:DX to standard output 

exit: 
    MOV AH,4CH 
    INT 21H 

現在嘗試用這種方法首先給輸入2比5,看輸出。現在再次運行並輸入5以上的值2.當你自己運行時,你會明白更多。

相關問題