鱼C论坛

 找回密码
 立即注册
查看: 4455|回复: 13

实验9的问题 谁来帮我看看代码。。老是出错 无法编译 郁闷

[复制链接]
发表于 2011-6-26 22:17:16 | 显示全部楼层 |阅读模式

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

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

x
我的字符属性是单一的  没有弄成三种颜色   我想先试试单一颜色的 再改进  可是就是无法编译 。。。求助  
  1. assume cs:code,ds:data,ss:stack
  2. data segment ;数据段
  3. db 'welcome !'
  4. data ends

  5. stack segment ;堆栈段
  6. db 0,0,0,0,0,0
  7. stack ends

  8. code segment ;代码段
  9. start:mov ax,data
  10. mov ds,ax
  11. mov ax,stack
  12. mov ss,ax
  13. mov ax,code
  14. mov cs,ax
  15. mov sp,0
  16. mov si,0
  17. mov ax,0b800h
  18. mov es,ax
  19. mov di,0
  20. mov bx,0
  21. mov cx,3
  22. yes:push cx ?外循环 外循环的cx入栈
  23. s1:mov cx,9 ;内循环
  24. mov al,ds:[si] ;字符字节
  25. mov ah,0cah ;颜色字节
  26. mov es:[di+bx],ax ;把ax传给目标字内存
  27. add si,1
  28. add di,2
  29. loop s1
  30. add bx,0a0h
  31. pop cx ;外循环的cx出照栈
  32. loop yes
  33. code ends
  34. end start
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-27 06:33:27 | 显示全部楼层
本帖最后由 king嗜血法师 于 2011-6-27 06:37 编辑

yes:push cx ?外循环 外循环的cx入栈
注释符打错了。而且di和si在外循环没初始化。
mov di,0
mov si,0
应该放到yes:push cx的后面。

loop yes后面加入正常结束指令。
mov ax,4c00H
int 21H
虽然我现在还不是很了解这个指令,不过最好是习惯性的加上。

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-27 10:37:05 | 显示全部楼层
本帖最后由 陌路狂奔 于 2011-6-27 10:38 编辑

mov ax,code

mov cs,ax改成mov ax,DATA

mov Ds,ax。yes:push cx ?外循环 外循环的cx入栈
应该是分号吧。
yes:push cx ;外循环 外循环的cx入栈
另外加个mov ax,4c00H
int 21H
s1:mov cx,9 ;内循环。你确定这样不会进入死循环么?
add bx,0a0h,你的DI已经加了18上去了,所以你第二行会错位,解决方法是前面将DI入栈,后面再出栈。
表达的不是很清楚,希望你能看明白。
忘了说了,你的栈顶指针指向0你觉得会不会有问题呢,没试过,自己试一下吧
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-27 10:43:18 | 显示全部楼层
本帖最后由 陌路狂奔 于 2011-6-27 10:47 编辑

[code/][/
  1. assume cs:code,ds:data,ss:stack

  2. data segment ;数据段

  3. db 'welcome !'

  4. data ends



  5. stack segment ;堆栈段

  6. dw 0,0,0,0,0,0

  7. stack ends



  8. code segment ;代码段

  9. start:mov ax,data

  10. mov ds,ax

  11. mov ax,stack

  12. mov ss,ax

  13. mov ax,data

  14. mov ds,ax

  15. mov sp,10

  16. mov si,0

  17. mov ax,0b800h

  18. mov es,ax

  19. mov di,0

  20. mov bx,0

  21. mov cx,3

  22. yes:push cx ;外循环 外循环的cx入栈
  23. push si
  24. push di
  25. mov cx,9 ;内循环
  26. s1:

  27. mov al,ds:[si] ;字符字节

  28. mov ah,0cah ;颜色字节

  29. mov es:[di+bx],ax ;把ax传给目标字内存

  30. add si,1

  31. add di,2

  32. loop s1

  33. add bx,0a0h
  34. pop di
  35. POP si

  36. pop cx ;外循环的cx出照栈

  37. loop yes
  38. mov ax,4c00h
  39. int 21h

  40. code ends

  41. end start
复制代码
没编译,我觉得这样应该可行,试一下吧
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-27 12:35:03 | 显示全部楼层

我按你的说法加了mov di,0
                            mov si,0
                            还加了mov ax,4c00h
                                      int 21h
mov ax,code  mov cs,ax改为mov ax,data  mov ds,ax  我觉得没必要把  我下边不是也写了这个吗
如果没mov ax,code  mov cs,ax   怎么能找得到start这标号呢
还有那个?号我的代码里没有啊  我再贴一次、、奇怪 一贴上来就变成问号  为什么我这显示的是分号。。。
assume cs:code,ds:data,ss:stack
data segment            ;数据段
  db 'welcome !'
data ends
stack segment           ;堆栈段
  db 0,0,0,0,0,0
stack ends
code segment             ;代码段
start:mov ax,data
   mov ds,ax
   mov ax,stack
   mov ss,ax
   mov ax,code
   mov cs,ax
   mov sp,0
   mov si,0
   mov ax,0b800h
   mov es,ax
   mov di,0
   mov bx,0
   mov cx,3
yes:push cx  ?外循环    外循环的cx入栈
   mov di,0
   mov si,0
s1:mov cx,9   ;内循环
   mov al,ds:[si]    ;字符字节
   mov ah,0cah   ;颜色字节
   mov es:[di+bx],ax  ;把ax传给目标字内存
   add si,1
   add di,2
   loop s1
   add bx,0a0h
   pop cx       ;外循环的cx出照栈
   loop yes
   mov ax,4c00h
   int 21h
code ends
end start   
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-27 12:42:48 | 显示全部楼层
我把yes:push cx  那行的注释给删除了  然后就可以编译  为什么啊 郁闷 我明明写的是;号   莫名其妙 撞鬼了。。。
but还有那个我明明都定义了堆栈段  为什么编译完却警告没有堆栈段。。。。assume我也assume了  要mov ax,stack  mov ss,ax  我也做了 为什么却。。。
我有运行了下程序   还是发生错误。。。。郁闷  继续纠结。。。。
网上又要考概率  郁闷啊。。。。。都没时间学计算机。。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-27 12:45:39 | 显示全部楼层
陌路狂奔 发表于 2011-6-27 10:43
没编译,我觉得这样应该可行,试一下吧

我运行了 你的代码  ok的哈  我在比较中。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-27 12:52:14 | 显示全部楼层
额  你多了个mov ax,data

mov ds,ax
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-27 13:06:10 | 显示全部楼层
陌路狂奔 发表于 2011-6-27 10:43
没编译,我觉得这样应该可行,试一下吧

比较结果:
1。你多了个mov ax,data
             mov ds,ax
2.我sp设置成了0  现在改为了6      【?】    想问个问题  :如果我定义了个堆栈段  sp又设为0   有影响吗 是不是会影响到上边的数据段吗
3。貌似在循环内mov cx,9会导致无限循环。。。。我错了。。
现在试了试   额  还是错误
继续比较:
1.你用的是push di  和push si   而我是  外循环开头mov di,0  mov si,0    为什么我就不行呢。。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-27 13:12:54 | 显示全部楼层
奇怪 改成这样还不行。。。老是跑出个什么16位子系统的错  。。
  1. assume cs:code,ds:data,ss:stack
  2. data segment            ;数据段
  3.   db 'welcome !'
  4. data ends

  5. stack segment           ;堆栈段
  6.   db 0,0,0,0,0,0
  7. stack ends

  8. code segment             ;代码段
  9. start:mov ax,data
  10.    mov ds,ax
  11.    mov ax,stack
  12.    mov ss,ax
  13.    mov ax,code
  14.    mov cs,ax
  15.    mov sp,6
  16.    mov si,0
  17.    mov ax,0b800h
  18.    mov es,ax
  19.    mov di,0
  20.    mov bx,0
  21.    mov cx,3
  22. yes:push cx      
  23.    push di
  24.    push si
  25.    mov cx,9
  26. s1:   ;内循环
  27.    mov al,ds:[si]    ;字符字节
  28.    mov ah,0cah   ;颜色字节
  29.    mov es:[di+bx],ax  ;把ax传给目标字内存
  30.    add si,1
  31.    add di,2
  32.    loop s1
  33.    add bx,0a0h
  34.    pop si
  35.    pop di
  36.    pop cx       ;外循环的cx出照栈
  37.    loop yes
  38.    mov ax,4c00h
  39.    int 21h
  40. code ends
  41. end start   
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-27 13:16:15 | 显示全部楼层
陌路狂奔 发表于 2011-6-27 10:43
没编译,我觉得这样应该可行,试一下吧

我说这个16位子系统的错误到底是什么啊  为什么我一忽略一下就可以了  说明代码没问题   
但为什么你的代码都却没有这个错误呢。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-27 13:41:18 | 显示全部楼层
wdl7770016 发表于 2011-6-27 13:12
奇怪 改成这样还不行。。。老是跑出个什么16位子系统的错  。。

不知道你有没单步T一下呢,如果有应该知道在哪跳出那个16位子系统错误的。MOV AX,CODE   MOV CS,AX。这里你DEBUG看看会不会报错,还有那个栈顶指针指向0也就是栈底吧,如果你入栈PUSH SI  
SP=(SP-2),这里会不会有问题呢
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-27 13:52:22 | 显示全部楼层
你完全不用去定义CS,因为end start会默认程序的第一条指令是从start:开始的。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-28 15:58:39 | 显示全部楼层
郁闷了  我debug了一下   果然是mov ax,code mov cs,ax  这有问题   我发现这两句在debug时  居然只有mov cs,ax?    前一条哪里去了 撞鬼 了   谁能解释这现象。。。。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-5 02:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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