2012-03-06 83 views
0

我正在學習程序集作爲課程的一部分。這個代碼是清除屏幕然後鍵入4529.這是相當老派的風格,雖然我們的老師解釋得很好,所以我會堅持使用這種代碼風格,而不是使用HLA或宏等。現在來解決這個問題。即使我將確切的代碼複製粘貼到.asm中並按照指示使用nasm -o指令進行編譯,該程序也不會執行任何操作。如果我在dosbox中運行它,它會清除屏幕但無法打印數字。是那麼古老的代碼,我的32位操作系統不會支持它,不管是什麼?請幫助 - 我需要學習這種編碼風格,以便:通過課程,b:課程講義非常好,否則我不願意購買一本關於ASM的大型書籍。彙編代碼不適用於nasm

 [org 0x0100] 
jmp start 
    clr:  mov ax, 0xb800 
      mov es, ax 
      mov di, 0 

    nxt:  mov word[es:di], 0x0720 
      add di,2 
      cmp di,4000 
      jnz nxt 
      ret 

prntnum: push bp 
      mov bp, sp 
      push es 
      push ax 
      push bx 
      push cx 
      push dx 
      push di 


      mov ax, 0x0b800 
      mov es,ax 
      mov ax,[bp+4] 
      mov bx, 10 
      mov cx, 0 



nxtdigit:  mov dx,0 
      div bx 
      add dl,0x30 
      push dx 
      inc cx 
      cmp ax,0 
      jnz nxtdigit 

      mov di,0 

nextpos:   pop dx 
      mov dh,0x07 
      mov [es:di],dx 
      add di,2 
      loop nextpos 

      pop di 
      pop dx 
      pop cx 
      pop bx 
      pop ax 
      pop es 
      pop bp 
      ret 2 




start:  call clr 
      mov ax, 4529 
      push ax   
      call prntnum 

      mov ax,0x4c00 
      int 0x21 
+0

難道你的老師不建議開發環境? – 2012-03-06 01:38:52

+0

(遠程學習存檔視頻:)只需在任何文本編輯器中編寫代碼,使用nasm進行編譯並使用afd進行調試。我也無法在afd上找到一本手冊。目前,這更像是學期前的工作,所以我不能要求同伴 – 2012-03-06 01:45:09

+0

代碼看起來很好,FWIW,所以它必須與您創建COM文件的方式或運行它的環境有關。假定它可以在0xB800處寫入VGA適配器的視頻內存,這在大多數真實的DOS盒子中當然是一個有效的假設,但我不知道它是否總是在(虛擬)DOS盒子中保存。 – 2012-03-06 02:14:17

回答

0

問題解決了 - - 我好像在用黑色屬性寫它,所以沒有文字可見。一旦改變了,所有的程序都可以運行良好。

0

你似乎在NASM將採用16位代碼,您可能需要告訴NASM代碼的語法

[16 bit] 

在開始16位