2014-10-19 72 views
0

我正在寫一個程序,比較數據段中定義的2個數字。 我這樣定義它們如何比較2號碼?

Dseg SEGMENT PARA PUBLIC 'data' 
NUM1 DW 1 ; num1 = 1 
NUM2 DW 2 ; num2 = 2 
MAX DW ? ; variable to save the max number 
MIN DW ? ; variable to save the min number 
Dseg ENDS 


Cseg SEGMENT PARA PUBLIC 'code' 
    ASSUME CS : Cseg , DS : Dseg , SS : Sseg , ES : NOTHING 
    ORG 100H 

    Mov AX , Dseg 
    Mov DS , AX 

    Mov AX , NUM1 ; move num1 to AX 
    CMP AX , NUM2 ; compare num1 with num2 
    JAE MAX1  ; jump if num1 > num2 

    Mov AX , NUM2; ax = num2 
    Mov MAX , AX ; max = ax 
    Mov AX , NUM1; ax = num1 
    Mov MIN , AX ; min = ax 
    JMP ENDPROG 

MAX1 : 
    Mov AX , NUM1; ax = num1 
    Mov MAX , AX ; max = ax 
    Mov AX , NUM2; ax = num2 
    Mov MIN , AX ; min = ax  
    JMP ENDPROG 

ENDPROG : 
    ;.............. 


    Mov AX , 4c00H 
    INT 21H 


    Cseg ENDS 

    END 

但是跳轉順序不起作用!並且它卡在ENDPROG標籤。 我想知道這是爲什麼? 這段代碼有什麼問題?

+1

你是什麼意思_「跳轉命令不好」_? – Michael 2014-10-19 10:30:33

+0

jmp或jae不起作用。這就像沒有跳轉順序。 – zahra 2014-10-19 10:33:52

+0

您如何測試跳轉不起作用?在調試器中單步執行? – usr2564301 2014-10-19 11:03:13

回答

0

mov ax, NUM1加載ax地址爲NUM1。您應該使用mov ax, [NUM1],對於訪問變量的所有其他操作也應該如此。

+1

問題中的代碼看起來像是爲TASM或MASM編寫的。對於這些彙編程序,'mov ax,NUM1'和'mov ax,[NUM1]'意味着同樣的事情。 – Michael 2014-10-19 11:15:05

+0

哎。可能*因爲*這是一個頻繁的錯誤......如果OP確實使用其中的一個,我會刪除這個答案! – usr2564301 2014-10-19 11:17:17