注册 登录
编程论坛 汇编论坛

建立分支表的时候把标号定义在数据段里啥意思

未未来 发布于 2014-05-07 17:20, 605 次点击
在学汇编语言分支结构的时候有一只分支表的方法,就是在数据段建立一个表,表中存放要转移的程序段的名字(标号)
程序代码:
DATAS SEGMENT
    table dw prog0,prog1,prog2,prog0
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
  
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

可以单这样定义是通不过的
程序代码:
DATAS SEGMENT
    table dw prog0,prog1,prog2,prog0
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
   prog1:
   prog2:
   prog0:
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

在代码段写了标号之后就可以编译通过了,
我想请教一下为什么,
是不是代码段先于数据段放入内存,然后在进行数据段的存储,
那table开始的那个数据段存放的是什么。
4 回复
#2
未未来2014-05-07 18:18
我的想法应该是正确的,数据段内存存的是 代码段标号位置的偏移地址
#3
zklhp2014-05-07 18:21
我从来没用过这个东东 但很明显 第一种写法里面prog1神马的根本没定义。。

顺便 以后再问问题记得详细写出出错信息
#4
xkwy00002014-05-08 11:48
数据段很显然是用来存放可以修改的数据的,放在代码段中也可以吧
汇编语言提供了很大的灵活性
我总是希望别人容易看懂我编的程序,而不需要加很多的注释,
而结局往往是恰恰相反。
     比如经常习惯      call  [bx+n*2]
     不使用                 call  table+n
     从不使用              pop prog1  pop prog2     call  far ptr prog1
#5
zklhp2014-05-08 12:47
以下是引用xkwy0000在2014-5-8 11:48:27的发言:

数据段很显然是用来存放可以修改的数据的,放在代码段中也可以吧
汇编语言提供了很大的灵活性
我总是希望别人容易看懂我编的程序,而不需要加很多的注释,
而结局往往是恰恰相反。
     比如经常习惯      call  
     不使用                 call  table+n
     从不使用              pop prog1  pop prog2     call  far ptr prog1

注释应该告诉读程序的人 这里是干什么的 而不是解释指令的意思

比如这里要加注释 应该说调用它的原因 而不应该说具体的指令用法
1