2015-12-21 48 views
0

我最近開始編寫彙編程序。我的問題是我不知道如何結束程序。我寫低於該直到我第二函數調用後加入 jmp finish 沒有顯示所希望的輸出的代碼。我不明白爲什麼這個程序不會自行完成。我真的很感謝你的解釋。結束的組裝過程

  Data_segment_name segment para 

      Data_segment_name ends 


      Stack_segment_name segment para stack 
      dw 16 dup(0)    ;define your stack segment 
      Stack_segment_name ends 


      Code_segment_name segment 
      Main_prog proc far 

      assume SS:Stack_segment_name,CS:Code_segment_name,DS:Data_segment_name 

      mov AX,Data_segment_name ;load the starting address of the data 
      mov DS,AX     ; segment into DS reg. 

      call cls 
      call draw1 
      ;jmp finish 
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
      cls proc near 
      mov ax,0b800h 
      mov es,ax 
      mov ax,0720h 
      mov di,0 
      mov cx,2000 
      rep stosw 
      ret 
      cls endp 
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
      draw1 proc near  
      push ax 

      mov di,160*9+40*2 
      mov ax,0b800h 
      mov es,ax 
      mov ax, 1f2ah    
      stosw 
      cld 


      pop ax 
      ret 
      draw1 endp 

      finish: 
      mov ax,4c00h ; exit program 
      int 21h 
      Main_prog endp 
      Code_segment_name ends 
      end Main_prog 
+0

你嵌套你的程序到'Main_prog',這就是原因。你應該從'finish:'開始向上移動4行到'jmp finish'。 – Jester

+0

感謝您的快速回復。然而,我還有另一個問題,我怎樣才能編寫我的程序,而不將它們嵌套到遠程程序中? @jester – Nemo

+0

告訴你如何。向上移動包括'Main_prog endp'的結尾。 – Jester

回答

0

可能是最好的解決辦法是把finish代碼的主模塊本身中,所以您可以設置初始值,調用子程序和退出,都來自主模塊。

,否則你的代碼將剛剛從主模塊「砸鍋」進入子程序和迷路,或段錯誤,當第一個子程序「回報」。

+0

O.k謝謝大家 – Nemo

+0

請接受一個答案,即使你必須自己回答吧,以顯示你什麼工作。這是很好的StackOverflow禮儀。謝謝。 –

+0

我從完成開始移動了4行:jint完成後像@jester說的那樣。這對我有用 – Nemo