我正在学习组装作为我课程的一部分。这段代码是清屏然后输入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