关于第6章的实现编写最后一题
本帖最后由 wxc807 于 2011-11-8 05:30 编辑程序如下,编写CODE段中的代码,用PUSH指令将A段中的前8个字型数据,逆序存储到B段中assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start: mov ax,a
mov ss,ax
mov sp,31H
mov ds,ax
mov bx,0
mov cx,8
s: push
add bx,2
loop s
mov bx,0
mov cx,8
s1: pop
add bx,2
loop s1
mov ax,4c00h
int 21h
code ends
end start
这是本人写的。不知道为什么运行到最后自动跳出DEBUG。还用为什么 A数据默认在SS栈中不解,前面不是没有定义字型数据吗?默认不是在CS代码段中的吗?请高人解答,小弟万般感谢!!!
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start: mov ax,a
mov ss,ax
mov sp,11H
mov bx,0
mov cx,8
s: push cs:
add bx,2
loop s
mov ax,b
mov ds,ax
mov bx,0
mov cx,8
s2: pop ds:
add bx,2
loop s2
mov ax,4c00h
int 21h
code ends
end start
这 是从新编的.大牛们看一下.- -对吗??
本帖最后由 wxc807 于 2011-11-7 08:48 编辑
:L我错了。我想知道DS SS地址是从什么地方的来的。。CS我知道。是编译之后得到的地址,我单步调试的时候DS-ES-SS中都有地址??求解求解!!!!!数据存放是从DS开始的吗? 我看书上是这样说的:所有的数据都是从DS开始的吗? 不管代码还是数据数据还是代码的开头都是DS指向的
开头吗??然后加用了标号SRART就是代码的执行处,,那中间的数据差就是那些被定义的数据吗????
A16位字型数据等于十六进制的10,,那B的八个零代表3个字型数据???!!求解啊啊啊 啊啊啊 啊啊啊啊 啊啊 啊啊
在内存眼里面所有的东西都是数据吗??代码只是我们认为的它是代码。所以他才是代码对吗?
http://bbs.fishc.com/data/attachment/album/201111/07/0848364ltu922bzlkxv4za.jpg 楼主 ,你在mov ax, a mov ss, ax这里把a和栈挂钩了,它肯定是默认在栈中了{:5_109:}。
关于你第二个问题,你进debug的时候,ds ss es的地址都是默认的,当你的程序有要改变它的时候,它就会改变,还有数据是在ds中的, 当你把数据和ds挂钩的时候它就是, 你要是把cs挂钩就是代码,你说的b段 ,我在你程序中完全看不到跟ds和cs挂钩,所以cpu就把它当代码了,
我也是刚学的, 有什么不对了,希望大牛们指点我下,还有建议楼主在吧小甲鱼老师的汇编视频看下, {:5_109:} 本帖最后由 kane080824 于 2011-11-7 14:25 编辑
你这个程序问题不是一般的多,你的想法很好,你的本意是要把a段定义成栈段,然后弹出1-8存入b段,但是完全看不到b段怎么安排啊 问题多多,好好先看看小家碧玉(小甲鱼老师)的视频
本帖最后由 wxc807 于 2011-11-7 23:08 编辑
100531319 发表于 2011-11-7 11:04 http://bbs.fishc.com/static/image/common/back.gif
楼主 ,你在mov ax, a mov ss, ax这里把a和栈挂钩了,它肯定是默认在栈中了。
关于你第二个问 ...
assume cs:code{已经假设CODE是代码段了啊}他们的数据不都是在CS代码段里的吗?
前面是16位字型数据 栈的顶不是31吗?
CS不是要减去16位的字型数据=10还有我只是单步调试。为什么DS ES SS里面都已经有地址了。【只是R查看了。地址已经有了】
那我前面的MOV AX,A不等于是多余的吗?
http://bbs.fishc.com/data/attachment/album/201111/07/23070155n45vhfhojh6neq.jpg kane080824 发表于 2011-11-7 14:24 static/image/common/back.gif
你这个程序问题不是一般的多,你的想法很好,你的本意是要把a段定义成栈段,然后弹出1-8存入b段,但是完全看不到 ...
请大牛具体指出。小弟现在脑袋眩晕。无法进行思考。- - 无法思考就停两天在看, 先消化一下, 还有 ds, es,ss里面的地址是cpu默认的,当你要改变它时 ,它才会发生变化,比如说你发的图里,cs是13db,你要改变成1000来索引你要的数据还是什么,都可以,{:5_109:}楼主明白否, 楼主你可以考虑看下这个,根据你得代码编写的,你参考下{:5_109:}
assumecs:code,ds:a,ss:b
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh;字型数据有16个
a ends
b segment
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;栈空间也要有16个字型空间,才能存放,
b ends
code segment
start: mov ax, a
mov ds, ax;定义数据
mov ax, b
mov ss, ax
mov sp, 32 ;定义栈空间
mov bx, 0
mov cx, 16;有16个数据,所以要循环16次
s: push ds:; 入栈
add bx, 2 ;加2指向下一个字型数据
loop s 循环
mov ax, 4c00h
int 21h
code ends
end start
{:5_98:} 纯手打,{:5_95:}楼主要看不明白 ,重头把甲鱼老师的视频在看下, 我也刚学没到1个月,有什么错误希望大牛们指出,谢谢!{:5_109:} 100531319 发表于 2011-11-8 11:54 static/image/common/back.gif
楼主你可以考虑看下这个,根据你得代码编写的,你参考下
assumecs:code,ds:a,ss:b
循环那里应是PUSH DS:哦,题目中只要处理前8个就好了,其他和我的一样
页:
[1]