piggie 发表于 2011-8-21 00:45:04

关于实验五(5)的困惑

本帖最后由 piggie 于 2011-8-21 00:51 编辑

在论坛看到的这一段代码:注意红色的字段,第一行是code与代码段关联。那么后面的a,b,c没有关联,他们都在代码段中,段地址应是一样的。那mov ax,a   mov es,ax   mov ax,c      mov ds,ax
是在干什么?a把什么传进了ax,是段地址么?他没有和段关联呀。看了书上的例子,没有这样的。书上的例子都是在一开始都关联好的。困惑,请帮忙解答下。

assume cs:code

a segment

    db 1,2,3,4,5,6,7,8

a ends


b segment

   db 1,2,3,4,5,6,7,8

b ends


c segment

   db 0,0,0,0,0,0,0,0

c ends



code segment

start:mov ax,a

mov es,ax

mov ax,c

mov ds,ax

mov bx,0

mov cx,8



s1:mov ax,es:

add ,ax

add bx,2

loop s1



mov ax,b

mov es,ax

mov ds,ax

mov bx,0

mov cx,8



s2:mov ax,es:

add ,ax

add bx,2

loop s2



mov ax,4c00h

int 21h

code ends

end start

Potato丶 发表于 2011-8-21 12:07:10

我是这么理解的:不是必须关联的。一开始的关联不是很必要。下面a segment 是设立A段的意思,不是在代码段。他们是两个段,B.C也一样,下面必须要mov ax,a 这里的是将A段段地址赋给AX。然后再赋给其他段寄存器。CS段,A段,B段,C段是4个不同的段。段地址不同。

{:5_96:}就这个意思。不知道有没有错误。

tsembrace 发表于 2011-8-21 12:07:49

1、王爽书上第90页关于assume的说明:
“这条伪指令的含义是’假设‘。它假设某一段寄存器和程序中的某一个用segment...ends定义的段想关联。通过assume说明这种关联,在需要的情况下,编译程序可以将段寄存器和某一个具体的段相联系。。。“
这段话说得已经很明白了。
2、对于assume cs:code,ds:datasg这样的语句在编译处理过程中并不会被转为机器码,它作为伪指令,它的“关联”仅仅是一种假设。你可以在assume中也写出这样的假设,但因为只是”假设“,所以不写也没关系。而真正实现关联的是:"mov ax,a   mov ds,ax"这个语句。你提到的a段,其标号'a'在编译器编译过程中已经被自动转成了a段的段地址。在编译器读到如下指令时候,完成了对标号a赋值段地址的操作:a segment
db 1,2,3
a ends
3、上面1、2点应该能解释你的疑问了。至于标号a被转成的段地址的分析,我在关于自定义的段占用内存空间一文里有过说明和个人的理解;可惜没人去看。


piggie 发表于 2011-8-21 16:44:58

本帖最后由 piggie 于 2011-8-21 16:46 编辑

谢谢,有点明白了, 其标号'a'在编译器编译过程中已经被自动转成了a段的段地址
,我怎么没看到这样的描述啊。

tsembrace 发表于 2011-8-22 10:42:32

这句话我在书上确实也没见过,只是我自己的判断。。
但我觉得这个判断应该没有问题。。。
首先,可以确定的是mov ax,a这个语句中的a是a段的段地址;这在书上有提过,当然我们也可以通过debug看出来;
其次,涉及‘a'的指令就以下三个:
1、assume ds:a
这句是伪指令,在书上已有说明,只是预先假设;其次这语句出现时候的a还未进行定义;编译器在该语句时候无法定位a.
2、a segment
      db...
   a ends
3、mov ax,a
   mov ds,ax
这句只是传输指令,如果编译器在进行到这一步再去赋值a的话,编译器还得重新回到2步去解析。。

所以,只能是在上述2句编译的时候对a进行了赋值。。

素还真 发表于 2011-9-9 23:03:10

我是来看 我是不是VIP的
a b c他定义的数据 编译器会把a b c 翻译成一个段地址 并不是他存在当前段地址种

小丫 发表于 2011-9-10 16:11:55

又是a,b,c段没有定义的问题,这个都是基础,书本有些地方也是错的

cswz88 发表于 2011-9-10 16:34:33

不懂!!!!!!!!
页: [1]
查看完整版本: 关于实验五(5)的困惑