首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

同样是数据标号,为何会种不同意义?怎么编译

2014-01-19 
同样是数据标号,为何会种不同意义?如何编译?assume cs:codecode segmenta db 1,2,3,4,5,6,7,8b dw 0………………

同样是数据标号,为何会种不同意义?如何编译?
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 就取得了新的索引,这样的话,操作就不会错的。
其实,也没必要这么静态地瞎琢磨,生成可执行代码,用调试软件看相应的最原始的指令格式就很明了的。

热点排行