dd //define 一个字节 例如:dd 100
dw //define 一个字 也就是两个字节
例如:dw 0xaa55
db //define 双字 也就是4个字节
例如:db 0x12345678
由于intel x86的架构采用小端存储因此二进制序列如下:
如果是16进制在后面输入h
例如:dw 0xaa55h
如果是二进制在后面输入b
例如:db 0x11001100b
nasm语法允许使用下划线分割二进制方便观看
例如:db 0x1100_1100b 和上面的数字是一样的效果
如果想定义字符串那么定义的方法即使db
例如:db “hello world”
允许后面跟,添加其他内容
例如:db “hello world”,99,12,28
下面演示用汇编在bochs模拟器上输出一段话,详细注释已在汇编代码中给出:
[org 0x7c00] ;标识程序从0x7c00开始
mov ax,3 ;清空屏幕
int 0x10
xchg bx,bx ;下断点
mov ax,0xb800 ;实模式下文本模式的内存地址
mov es,ax
mov ax,0 ;因为段寄存器是不能直接mov赋值的,这段代码相当于ds=0
mov ds,ax
mov si,message ;要输入的文本的地址
mov di,0
mov cx ,(message_end-message) ;循环变量
loop1:
mov al,[ds:si] ;循环将文本送到文本显示区
mov [es:di],al
inc si ;inc指令 == +1
add di,2 ;一个字符占2个字节 第二个字节是控制文本样式的
loop loop1
message: ;标记 相当于此处的地址
db "hello world myOS!!",0
message_end: ;结束地址
halt:
jmp halt
times 510 - ($-$$) db 0
db 0x55, 0xaa
效果图如下: