鱼C论坛

 找回密码
 立即注册
查看: 3597|回复: 8

关于第6章的实现编写最后一题

[复制链接]
发表于 2011-11-7 06:36:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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 [bx]
            add bx,2
            loop s
                
            mov bx,0
            mov cx,8
s1:         pop [bx]
            add bx,2
            loop s1
            mov ax,4c00h
            int 21h
code ends
end start                

这是本人写的。不知道为什么运行到最后自动跳出DEBUG。还用为什么 A数据[DW]默认在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:[bx]
                   add bx,2
                   loop s
                   
                   mov ax,b
                   mov ds,ax
                   mov bx,0
                   mov cx,8
                   
s2:                   pop ds:[bx]
                   add bx,2
                   loop s2
                   
                   mov ax,4c00h
                   int 21h
                   
code ends
end start                    
这 是从新编的.大牛们看一下.- -  对吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-7 07:54:29 | 显示全部楼层
本帖最后由 wxc807 于 2011-11-7 08:48 编辑

:L  我错了。我想知道DS SS地址是从什么地方的来的。。CS我知道。是编译之后得到的地址,我单步调试的时候DS-ES-SS中都有地址??求解求解!!!!!数据存放是从DS开始的吗? 我看书上是这样说的:所有的数据都是从DS开始的吗? 不管代码还是数据数据还是代码的开头都是DS指向的
开头吗??然后加用了标号SRART就是代码的执行处,,那中间的数据差就是那些被定义的数据吗????
A[DW]16位字型数据等于十六进制的10,,那B[DW]的八个零代表3个字型数据???!!求解啊啊啊 啊啊啊 啊啊啊啊 啊啊 啊啊


在内存眼里面所有的东西都是数据吗??代码只是我们认为的它是代码。所以他才是代码对吗?


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-7 11:04:39 | 显示全部楼层
楼主 ,你在mov ax, a   mov ss, ax这里把a和栈挂钩了,它肯定是默认在栈中了

关于你第二个问题,你进debug的时候,ds ss es的地址都是默认的,当你的程序有要改变它的时候,它就会改变,  还有数据是在ds中的, 当你把数据和ds挂钩的时候它就是, 你要是把cs挂钩就是代码,你说的b段 ,我在你程序中完全看不到跟ds和cs挂钩,所以cpu就把它当代码了,

我也是刚学的, 有什么不对了,希望大牛们指点我下,  还有建议楼主在吧小甲鱼老师的汇编视频看下,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-7 14:24:06 | 显示全部楼层
本帖最后由 kane080824 于 2011-11-7 14:25 编辑

你这个程序问题不是一般的多,你的想法很好,你的本意是要把a段定义成栈段,然后弹出1-8存入b段,但是完全看不到b段怎么安排啊    问题多多,好好先看看小家碧玉(小甲鱼老师)的视频
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-7 23:08:21 | 显示全部楼层
本帖最后由 wxc807 于 2011-11-7 23:08 编辑
100531319 发表于 2011-11-7 11:04
楼主 ,你在mov ax, a   mov ss, ax这里把a和栈挂钩了,它肯定是默认在栈中了。

关于你第二个问 ...


assume cs:code{已经假设CODE是代码段了啊}  他们的数据不都是在CS代码段里的吗?
前面是16位字型数据 栈的顶不是31吗?

CS不是要减去16位的字型数据=10还有我只是单步调试。为什么DS ES SS  里面都已经有地址了。【只是R查看了。地址已经有了】
那我前面的MOV AX,A不等于是多余的吗?

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-7 23:10:02 | 显示全部楼层
kane080824 发表于 2011-11-7 14:24
你这个程序问题不是一般的多,你的想法很好,你的本意是要把a段定义成栈段,然后弹出1-8存入b段,但是完全看不到 ...

请大牛具体指出。小弟现在脑袋眩晕。无法进行思考。- -
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-8 11:22:46 | 显示全部楼层
无法思考就停两天在看, 先消化一下, 还有 ds, es,ss里面的地址是cpu默认的,当你要改变它时 ,它才会发生变化,比如说你发的图里,cs是13db,你要改变成1000来索引你要的数据还是什么,都可以,楼主明白否,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-8 11:54:49 | 显示全部楼层
楼主你可以考虑看下这个,根据你得代码编写的,你参考下

assume  cs: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:[0]  ; 入栈
        add bx, 2   ;加2指向下一个字型数据
       loop s    循环

      mov ax, 4c00h
      int 21h
code ends

end start
纯手打  ,  楼主要看不明白 ,重头把甲鱼老师的视频在看下, 我也刚学没到1个月,有什么错误希望大牛们指出,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-10 23:56:52 | 显示全部楼层
100531319 发表于 2011-11-8 11:54
楼主你可以考虑看下这个,根据你得代码编写的,你参考下

assume  cs:code,ds:a,ss:b

循环那里应是PUSH DS:[BX]哦,题目中只要处理前8个就好了,其他和我的一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 19:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表