对第四章第一个程序的cs了解的不是很清楚。询问下。
本帖最后由 郑小夕 于 2011-5-19 15:52 编辑为什么要有CS:codesg 呢
我现在理解是把那个段 当作代码段。
换成别的
这里的意思(右图)就不一样了吗?
大家帮我深度剖析一下。 本帖最后由 sunhopp 于 2011-5-18 18:23 编辑
CS:codesg ,其中codesg只是定义的一个名称而以,可换成别的,如:name,但必须与 ends相对应!
CS:codesg 是告诉CPU 在codesg里的是的数据是代码类型! 这个视频上讲的很详细,看仔细点。个人见解是,如果你没CS的话,那么编译器怎么找到代码段?CPU怎么认识这是数据还是代码还是栈? 回复 王子 的帖子
我怎么感觉 他自己会识别啊啊。
如果把CS譬如换成 ds
"mov ax,0123H
MOV BX,0456h
ADD AX,BX
ADD AX,AX"
意思就不一样了 是吗?
分别是啥意思 你可以试试,换了以后用debug调试。 这里CS:CODE的作用是让CPU把cs:ip 指向下面的第一条指令(当然这第一条指令之前没定义数据段、栈段) 如果不加 CS:CODE CPU就不知道第一条指令从哪个地方开始执行
例 如下指令:
assume ;这里如果不把CODE 和 CS挂钩 CPU它就不知道CS:IP指向的是哪里,
code segment
mov ax,4454h
mov bx,1154h
add ax,bx
……………………
…………………… Y.H 发表于 2011-5-18 22:47 static/image/common/back.gif
这里CS:CODE的作用是让CPU把cs:ip 指向下面的第一条指令(当然这第一条指令之前没定义数据段、栈段) 如果 ...
但是他后面一般有start去指定ip一开始指向的位置吧..... 就像3楼说的..这个是伪指令那自然是给编译器看的...我觉得应该是告诉编译器从下面开始都是代码段...而不是数据段或者其他.... 回复 daniel_c 的帖子
呵呵 我是针对楼主给出的代码那代码很简单 而且 也没定义数据段 所以 不加 start:标号 也是可以的 郑小夕 发表于 2011-5-18 18:13 static/image/common/back.gif
为什么要有CS:codesg 呢
我现在理解是把那个段 当作代码段。
换成别的
assume cs:codesg是一个伪指令,就是说是写给编译器来读的,cpu本身并不知道哪个段是代码段。。也不会把这些当作代码处理。
assume是假设的意思。。放在这里就是起到一个作用,这条指令告诉编译器把asm文本编译成exe文件并被执行的时候,将cpu寄存器cs:ip的值指向系统给下面这段代码分配的内存地址的开始。。
页:
[1]