wxc807 发表于 2011-11-7 06:36:34

关于第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 07:54:29

本帖最后由 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

100531319 发表于 2011-11-7 11:04:39

楼主 ,你在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:24:06

本帖最后由 kane080824 于 2011-11-7 14:25 编辑

你这个程序问题不是一般的多,你的想法很好,你的本意是要把a段定义成栈段,然后弹出1-8存入b段,但是完全看不到b段怎么安排啊    问题多多,好好先看看小家碧玉(小甲鱼老师)的视频

wxc807 发表于 2011-11-7 23:08:21

本帖最后由 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

wxc807 发表于 2011-11-7 23:10:02

kane080824 发表于 2011-11-7 14:24 static/image/common/back.gif
你这个程序问题不是一般的多,你的想法很好,你的本意是要把a段定义成栈段,然后弹出1-8存入b段,但是完全看不到 ...

请大牛具体指出。小弟现在脑袋眩晕。无法进行思考。- -

100531319 发表于 2011-11-8 11:22:46

无法思考就停两天在看, 先消化一下, 还有 ds, es,ss里面的地址是cpu默认的,当你要改变它时 ,它才会发生变化,比如说你发的图里,cs是13db,你要改变成1000来索引你要的数据还是什么,都可以,{:5_109:}楼主明白否,

100531319 发表于 2011-11-8 11:54:49

楼主你可以考虑看下这个,根据你得代码编写的,你参考下{: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:}

cfer 发表于 2011-11-10 23:56:52

100531319 发表于 2011-11-8 11:54 static/image/common/back.gif
楼主你可以考虑看下这个,根据你得代码编写的,你参考下

assumecs:code,ds:a,ss:b


循环那里应是PUSH DS:哦,题目中只要处理前8个就好了,其他和我的一样
页: [1]
查看完整版本: 关于第6章的实现编写最后一题