王爽汇编第二版 实验5(6)的疑惑
实验5 编写、调试具有多个段的程序(6)程序如下,编写code段中代码,用PUSH指令将A段中的前8个字型数据,逆序存储到B段中。assume cs:codea segment dw 1,2,3,4,5,6,7,8a endsb segment dw 0,0,0,0,0,0,0,0b endscode segmentstart: mov ax,a mov ds,ax ;ds指向a段 mov ax,b mov bx,0 ;ds:bx指向a段的第1个单元 mov ss,ax mov sp,16 ;设置栈顶指向b:16 mov cx,8 s: push add bx,2 loop s ;将a段中0~16个单元逆次入栈code endsend start 以上为网络答案,这段内容中定义了a段和b段,并且把b段当作栈来使用了,请问为什么第一行只有assume cs:code 按照道理第一行应该是 assume cs:code,ds:a,ss:b 难道说这些假设关联"ds:a,ss:b"可有可无吗? 请教各位高手,小弟在此谢谢了!我在百度了下,发现这个答案感觉比较合意
“assume只是告诉编译器用的,我感觉在8086汇编下没什么大作用,在win32汇编下作用就大了,主要用来关联结构体等数据” lms99251 发表于 2014-1-10 14:42 static/image/common/back.gif
我在百度了下,发现这个答案感觉比较合意
“assume只是告诉编译器用的,我感觉在8086汇编下没什么大作用, ...
谢谢,不过还是没有正面回答我的问题。 本帖最后由 dlzhwm 于 2014-1-12 00:13 编辑
以上为网络答案,这段内容中定义了a段和b段,并且把b段当作栈来使用了,请问为什么第一行只有assume cs:code
因为分段和段名是编程者决定的,只是通过assume cs:code伪指令告诉编译器CODE(也可以起别的名称)是代码段而已,编译器就会把CODE所在段地址给CS。
按照道理第一行应该是 assume cs:code,ds:a,ss:b
理解太机械,A不可以定义为SS:A吗?B不可以定义为DS:B吗?不是规定要这样,是编程者自己
如何使用就如何定义。
难道说这些假设关联"ds:a,ss:b"可有可无吗?
这要看编程者和解决问题的需要而定。也可以说在第一行"ds:a,ss:b"可有可无。
希望对你有帮助。
计算机要知道一个程序从哪里开始就要知道end后面接的是什么 而end后面接的就是一个程序的开始 这个开始是一个标号 assume告诉编译器 那些段有标号 一个程序必须要有代码 所以要有个开始 所以assume cs:****必须要 而段是程序员假想的
不知道是不是你想要的 sd53852728 发表于 2014-1-13 21:19 static/image/common/back.gif
计算机要知道一个程序从哪里开始就要知道end后面接的是什么 而end后面接的就是一个程序的开始 这个开始是一 ...
首先谢谢你的回答,我还是想追问一下,如果同样是定义了多个段,但是assume不申明这些段也是可以的,而申明了会让指令显得很有条理性? 最后就是说申明与不申明是根据具体情况而定的,我这样理解对吗? 也算是对的吧:shock: 这都是些什么回答啊,自己不懂看看就得了,不要出来误导别人好不啦,这是我的感觉,不要喷我,没意思。
页:
[1]