鱼C论坛

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

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

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

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

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

x
本帖最后由 wxc807 于 2011-11-8 05:30 编辑

程序如下,编写CODE段中的代码,用PUSH指令将A段中的前8个字型数据,逆序存储到B段中
  1. assume cs:code

  2. a segment
  3.         dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
  4.                
  5. a ends

  6. b segment
  7.         dw 0,0,0,0,0,0,0,0
  8.                
  9. b ends

  10. code segment

  11. start:      mov ax,a
  12.             mov ss,ax
  13.             mov sp,31H
  14.             mov ds,ax
  15.                
  16.             mov bx,0
  17.             mov cx,8
  18.                
  19. s:          push [bx]
  20.             add bx,2
  21.             loop s
  22.                
  23.             mov bx,0
  24.             mov cx,8
  25. s1:         pop [bx]
  26.             add bx,2
  27.             loop s1
  28.             mov ax,4c00h
  29.             int 21h
  30. code ends
  31. end start               
复制代码


这是本人写的。不知道为什么运行到最后自动跳出DEBUG。还用为什么 A数据[DW]默认在SS栈中不解,前面不是没有定义字型数据吗?默认不是在CS代码段中的吗?请高人解答,小弟万般感谢!!!


  1. assume cs:code
  2. a segment
  3.         dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
  4. a ends

  5. b segment
  6.         dw 0,0,0,0,0,0,0,0
  7. b ends

  8. code segment
  9.         
  10. start:             mov ax,a
  11.                    mov ss,ax
  12.                    mov sp,11H
  13.                   
  14.                    mov bx,0
  15.                    mov cx,8
  16.                   
  17. s:                   push cs:[bx]
  18.                    add bx,2
  19.                    loop s
  20.                   
  21.                    mov ax,b
  22.                    mov ds,ax
  23.                    mov bx,0
  24.                    mov cx,8
  25.                   
  26. s2:                   pop ds:[bx]
  27.                    add bx,2
  28.                    loop s2
  29.                   
  30.                    mov ax,4c00h
  31.                    int 21h
  32.                   
  33. code ends
  34. end start                   
复制代码

这 是从新编的.大牛们看一下.- -  对吗??
小甲鱼最新课程 -> https://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个字型数据???!!求解啊啊啊 啊啊啊 啊啊啊啊 啊啊 啊啊


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


                               
登录/注册后可看大图
小甲鱼最新课程 -> https://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就把它当代码了,

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

你这个程序问题不是一般的多,你的想法很好,你的本意是要把a段定义成栈段,然后弹出1-8存入b段,但是完全看不到b段怎么安排啊    问题多多,好好先看看小家碧玉(小甲鱼老师)的视频
小甲鱼最新课程 -> https://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不等于是多余的吗?

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

请大牛具体指出。小弟现在脑袋眩晕。无法进行思考。- -
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-11-8 11:22:46 | 显示全部楼层
无法思考就停两天在看, 先消化一下, 还有 ds, es,ss里面的地址是cpu默认的,当你要改变它时 ,它才会发生变化,比如说你发的图里,cs是13db,你要改变成1000来索引你要的数据还是什么,都可以,楼主明白否,
小甲鱼最新课程 -> https://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个月,有什么错误希望大牛们指出,谢谢!
小甲鱼最新课程 -> https://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个就好了,其他和我的一样
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-4 02:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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