私はコースの一環としてアセンブリを学んでいます。このコードは、画面をクリアしてから 4529 と入力するものです。非常に昔ながらのスタイルですが、先生はとてもよく説明してくれるので、HLA やマクロなどを使用する代わりに、このスタイルのコードに固執します。問題が発生します。正確なコードをコピーして .asm に貼り付け、指示に従って nasm -o ディレクティブでコンパイルしても、プログラムは何もしません。dosbox 内で実行すると、画面はクリアされますが、番号の出力に失敗します。コードが古すぎて、私の 32 ビット OS では何があってもサポートされないのでしょうか? 助けてください - 私はこのコーディング スタイルを学ぶ必要があります。a: コースに合格するため、b: それ以外の場合、講義資料は非常に優れているため、ASM に関する大きな本を購入するのをためらっています。
[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