同样是数据标号,为何会种不同意义?如何编译?
assume cs:code
code segment
a db 1,2,3,4,5,6,7,8
b dw 0
……………………
……………………
(后面省略)
书上说:
对于程序中的b dw 0
指令: mov ax,b
相当于:mov ax,cs:[8]
那这个数据标号b不就代表了内存单元中的数据了嘛。。。
再看这个子程序:
charstack:jmp short charstart
table dw charpush
top dw 0
charstart:........
........
(省略)
charpush: mov bx,top
mov [si][bx],al
inc top
那这里的数据标号top是不是应该表示地址才对啊。。。。
问题来了,同样是数据标号
为什么在上面的程序中代表内存单元中的数据
而在下面的程序中却代表了地址呢?
那编译的时候怎么知道它编译成什么样。。。。
[解决办法]
这个,要看 si 吧,看这些代码,si 应该指向某数组之首,top 存放的是索引,inc top 就是指向下一个单元(数组单元类型应该是 byte),下一循环时的 mov bx,top 就取得了新的索引,这样的话,操作就不会错的。
其实,也没必要这么静态地瞎琢磨,生成可执行代码,用调试软件看相应的最原始的指令格式就很明了的。