guohuo888meng@1 发表于 2017-2-13 15:25:47

汇编语言书中代码问题,如图

如图,书中代码只写了assume cs:code 却没写ss:stack,这样也是可以的吗?

guohuo888meng@1 发表于 2017-2-13 15:26:26

新手,求大神指点

guohuo888meng@1 发表于 2017-2-15 09:42:00

大神快来

guohuo888meng@1 发表于 2017-2-15 15:26:30

有人知道吗

从善如登 发表于 2017-2-15 22:55:29

H:\Users\YD\Desktop\1

从善如登 发表于 2017-2-15 23:04:01

本帖最后由 从善如登 于 2017-2-15 23:07 编辑

这样是可以的,我亲自试了,如图。
我定义了两个段,第一个是数据段data,第二个是代码段code。虽然assume后面只关联了CS:code,但编译后没有错误,debug也可以调试。
而且这两个段是相连接的,data段开始地址为0B430H,code段开始地址为0B440H(如前两张图)。第三个图中,我没有定义ds:data,但是我成功的把data段地址给了ds寄存器,最后ds寄存器的值从0B33H→0B43H(如图三)。
综上,书中的代码是可行的,可能不太严谨。

从善如登 发表于 2017-2-15 23:05:55

从善如登 发表于 2017-2-15 23:04
这样是可以的,我亲自试了,如图。
我定义了两个段,第一个是数据段data,第二个是代码段code。虽然assume ...

上面最后一句话有误,应为”最后ds寄存器的值从0B33H→0B43H(如图三)”。

guohuo888meng@1 发表于 2017-2-16 10:15:21

从善如登 发表于 2017-2-15 23:05
上面最后一句话有误,应为”最后ds寄存器的值从0B33H→0B43H(如图三)”。

多谢大神,我之所以没有实际操作是因为我是win7 64的系统,没安装debug。另外图三指令为什么是从data段执行的,前面既然assume cs:code指定了代码段,不应该从代码段第一行执行吗?(没指名入口的情况下)

从善如登 发表于 2017-2-16 18:45:47

guohuo888meng@1 发表于 2017-2-16 10:15
多谢大神,我之所以没有实际操作是因为我是win7 64的系统,没安装debug。另外图三指令为什么是从data段 ...

CPU从程序汇编指令的第一个开始执行。为何?因为end后面没有类似于start的标号,所以编译器翻译的信息中CS:IP=0B43:0000。如果把start:放在data段中,CPU还是将从data段的汇编指令开始执行(此时CS:IP依然为0B43:0000),若start:在code段的第一条指令前,此时CS:IP为0B44:0000。总之,所有的汇编指令加载到内存中,对CPU而言都只是机器码01而已,CPU怎么执行是靠CS:IP来决定,而伪指令和标号(end start) 会被编译器翻译成CS:IP的机器码来决定程序从哪里开始执行。

兰陵月 发表于 2017-2-16 19:30:43

guohuo888meng@1 发表于 2017-2-16 10:15
多谢大神,我之所以没有实际操作是因为我是win7 64的系统,没安装debug。另外图三指令为什么是从data段 ...

系统会给你分配一个默认的栈区

guohuo888meng@1 发表于 2017-2-17 10:08:57

从善如登 发表于 2017-2-16 18:45
CPU从程序汇编指令的第一个开始执行。为何?因为end后面没有类似于start的标号,所以编译器翻译的信息中C ...

谢谢,既然是这样的,图3代码开头的assumecs:code能起到什么作用?

A小小鸟 发表于 2017-2-17 14:08:37

可以的,这是定义了一个栈段,你好好看看那前面基础吧

guohuo888meng@1 发表于 2017-2-17 14:38:29

A小小鸟 发表于 2017-2-17 14:08
可以的,这是定义了一个栈段,你好好看看那前面基础吧

谢谢你的回答,请问代码开头的assumecs:code能起到什么作用?

从善如登 发表于 2017-2-17 19:06:39

目前还不弄清楚,等哪天清楚了,再回来答复你。

从善如登 发表于 2017-2-17 19:08:48

体会一下这张图中CS:IP跟前三张图的CS:IP差别。

A小小鸟 发表于 2017-2-18 11:29:11

guohuo888meng@1 发表于 2017-2-17 14:38
谢谢你的回答,请问代码开头的assumecs:code能起到什么作用?

开头的assume cs:code,其实是个伪指令,这是一个假设,为后面的汇编语句提供一个接口而已

guohuo888meng@1 发表于 2017-2-21 22:06:16

A小小鸟 发表于 2017-2-18 11:29
开头的assume cs:code,其实是个伪指令,这是一个假设,为后面的汇编语句提供一个接口而已

奥奥,明白了,谢谢·
页: [1]
查看完整版本: 汇编语言书中代码问题,如图