2016-10-07 14 views
0

OK,所以我寫了一些代碼:代碼需要打印10而實際上並沒有改變代碼,只是變量,我是這樣寫的,但它不適用於我,任何幫助? 編輯:它必須與兩個變量!裝配變更變量的靜態代碼

//this two lines should be change 
    num1_ptr dw 10 
    num1_ptr_ptr dw offset num1_ptr 

    //no touch this four lines!  
      mov bx,num1_ptr_ptr 
      mov bx,[bx] 
      mov ax,[bx] 
      call print_function 
+0

爲什麼'num1_ptr'在名稱中包含'ptr'而不是指針?根據代碼判斷,你需要3個變量; 'num1','num1_ptr'和'num1_ptr_ptr'。 – Michael

+0

這是MASM嗎?那麼我會擔心已經先把'mov bx,num1_ptr_ptr'編譯爲'mov bx,[num1_ptr_ptr]',那麼你需要3個變量,比如Michael寫的。在普通的Intel語法彙編程序中(其中第一個mov會加載帶偏移量num1_ptr_ptr值的bx,而不是引用內存),您的代碼看起來沒問題。 – Ped7g

+0

它必須是兩行和兩個變量。我將更改他們的名字 –

回答

1

如果這是MASM(mov bx,num1_ptr_ptr不取的價值,而不是地址),您可以通過在定義兩個詞「可以改變這兩條線」,那麼也許這個「黑客」會做(引入第三值第一行):

num1_ptr  dw 10, offset num1_ptr 
    num1_ptr_ptr dw offset num1_ptr+2 
+0

謝謝!我搜索了 –

+0

@ DRJ好的,但這是一種欺騙,使用3個字變量......然後,看起來似乎沒有其他方式,我希望至少你明白我做了什麼,以及爲什麼「+2」(計算超出「字10」值的地址)。 – Ped7g

+0

Offcourse我瞭解我的朋友! –