在代码段中使用数据
在汇编程序中,会遇到
dw,这个的含义是定义一个字型数据(define word)。
假设有以下的汇编代码:
assume cs:code
code segment
;data
dw 0000h,0001h,0002h,0003h,0010h
;program
mov ax,0h
mov bx,ax
mov cx,ax
mov dx,ax
mov cx,5h
;looper
looper: add ax,cs:[bx]
add bx,21h
loop looper
;quit program
mov ax,4c00h
int 21h
code ends
end
这里,我们定义了5个字型数据,他们所占用的内存空间大小为10个字节,并在 looper 中对这5个字节的数据进行累加,编译链接后,在 debug 中使用 u 查看指令,可以发现程序并不是如我们期待的那样子,这是因为对于前面所定义的数据,它也当做指令了。

所以,为了解决这个问题,我们加入一个标识符用来说明程序开始执行的位置,这个标识符和代码最后一行的 end 相匹配,修改后的代码如下:
assume cs:code
code segment
;data
dw 0000h,1111h,2222h,3333h,6666h
;program
__start: mov ax,0h
mov bx,ax
mov cx,ax
mov dx,ax
mov cx,5h
;looper
looper: add ax,cs:[bx]
add bx,21h
loop looper
;quit program
mov ax,4c00h
int 21h
code ends
end __start
使用 __start 标识符,并且修改 end 为相匹配的 end __start,再次编译链接后,查看:

使用 end __start 来表明程序的入口点为 __start 段,这样,程序被加载到内存后,就会从指定的位置开始运行。