0

我正在学习组装作为我课程的一部分。这段代码是清屏然后输入4529。这是相当老派的风格,虽然我们的老师解释得很好,所以我会坚持这种风格的代码,而不是使用HLA或宏等。现在问题来了。即使我将确切的代码复制粘贴到 .asm 中并按照指示使用 nasm -o 指令编译它,程序也不会执行任何操作。如果我在 dosbox 中运行它,它会清除屏幕但无法打印数字。代码是否如此古老以至于我的 32 位操作系统无论如何都不支持它?请帮助 - 我需要学习这种编码风格: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

您似乎在 NASM 中使用 16 位代码,您可能需要使用语法告诉 nasm 代码是 16 位

[16 bit]

在开始时

于 2012-09-08T14:40:53.773 回答
0

问题解决了--看来我是用黑色属性写的,所以看不到任何文字。一旦改变,所有程序都运行良好。

于 2012-03-07T19:50:41.560 回答