我正在學習程序集作爲課程的一部分。這個代碼是清除屏幕然後鍵入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
難道你的老師不建議開發環境? – 2012-03-06 01:38:52
(遠程學習存檔視頻:)只需在任何文本編輯器中編寫代碼,使用nasm進行編譯並使用afd進行調試。我也無法在afd上找到一本手冊。目前,這更像是學期前的工作,所以我不能要求同伴 – 2012-03-06 01:45:09
代碼看起來很好,FWIW,所以它必須與您創建COM文件的方式或運行它的環境有關。假定它可以在0xB800處寫入VGA適配器的視頻內存,這在大多數真實的DOS盒子中當然是一個有效的假設,但我不知道它是否總是在(虛擬)DOS盒子中保存。 – 2012-03-06 02:14:17