如下图,这个程序显示了一串字符和一个十进制无符号数。我把功能封装成了子程序。显示数使用循环分解数位压栈出栈实现。
虽然nasm默认无段定义时默认整个程序成一段,这个程序定义了一个段似乎多此一举——不,重点是段定义时的vstart=0x7c00语句,这样在此段内段地址默认为0x7c00(硬盘主引导扇区程序被加载到的位置),省去了许多麻烦。
xor ax,ax能置ax为0,比mov ax,0指令简短,执行速度更快。
详见代码:
; 显示数位.asm
; Coco 07
; 硬盘主引导扇区程序
; 2020.3.13 20:12 创建
; 2020.3.13 21:29 修改
;============================================================
SECTION main vstart=0x7c00
jmp near start
string db 'Hello world!This is a good number:',0
number dw 1024
stack times 32 dw 0
start:
mo