0

私はコースの一環としてアセンブリを学んでいます。このコードは、画面をクリアしてから 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
4

2 に答える 2

0

問題は解決しました - - 黒色属性を使用して書いていたようで、テキストが表示されませんでした。それが変更されると、すべてのプログラムは正常に実行されます。

于 2012-03-07T19:50:41.560 に答える
0

NASM で 16 ビット コードを使用しているようです。nasm に次の構文でコードが 16 ビットであることを伝える必要があるかもしれません

[16 bit]

開始時

于 2012-09-08T14:40:53.773 に答える