鱼C论坛

 找回密码
 立即注册
查看: 2654|回复: 7

【实验7】为什么用debug测试的时候才T到第二条就停止工作的呢?

[复制链接]
发表于 2012-4-17 14:54:55 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Beng! 于 2012-4-17 18:07 编辑

assume cs:code
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 34980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800

data ends

table segment
db 21 dup ('year summ ne ??')
table ends

stack segment
dw 4 dup (0)
stack ends

code segment
start:mov ax,stack
      mov ss,ax 《------运行这一条的时候就挂了!!!
      mov sp,5

      mov ax,data
      mov ds,ax

      mov ax,table
      mov es,ax
      mov si,0
      mov bx,0
      mov cx,21
S:    push cx
      mov di,0
      mov cx,4
   s1:mov al,ds:[si]
      mov es:[bx+di],al
      inc si
      inc di
   loop s1
      mov cx,4
      mov di,0
      mov si,0
   s2:mov al,ds:[si+42]
      mov es:[bx+di+5],al
      inc si
      inc di
   loop s2
      mov cx,2                                   
      mov si,0
      mov di,0
   s3:mov al,ds:[si+84]
      mov es:[bx+si+10],al
      inc si
      inc di
   loop s3
   add bx,16
   pop cx
loop s


      mov cx,21
      mov bx,0
      mov di,5
   s4:push es:[bx+di]
      pop dx
      push es:[bx+di]
      pop ax

      div word ptr es:[bx+10]
      mov ax,es:[bx+13]
      add bx,16
   loop s4

     mov ax,4c00h
     int 21h
code ends
end start
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-17 16:03:41 | 显示全部楼层
弱弱的问一下,这样写对不对呀
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-17 17:38:10 | 显示全部楼层
本帖最后由 Y.H 于 2012-4-17 17:39 编辑

你这个程序还有除法溢出错误!
你定义栈段的时候是:dw 4 dup (0) 意思四个“字”的内存单元,也就是8个字节,
那么应该是mov ss,ax     mov sp,8    改为8之后顺利执行过去,

关于你这个除法溢出,还得你自己研究研究除法指令div的执行原理!


不过,看的出来,你在数据类型方面不熟悉,,,,估计你理解了上面的那个错误之后,你的除法溢出错误也能顺利解决。。。。



小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-17 17:40:12 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-4-17 17:45 编辑

code segment
start:mov ax,stack
      mov ss,ax 《------运行这一条的时候就挂了!!!
      mov sp,5  太小了 你用debug 调试的时候最少也要弄个10H的栈

   mov cx,21
      mov bx,0
      mov di,5
   s4:push es:[bx+di]
      pop dx
      push es:[bx+di]
      pop ax

这个完全没必要写在循坏外面在循环一次除法.. 只需要找对位置然后进行除法... 往后面翻一番 以前有些发过这个实验题目的!~适当的参考以下别人的代码 试着给代码加上注释(这是理解代码的方法理解对方的思路)
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-17 17:44:06 | 显示全部楼层
好的 我再试试 谢谢你们 亲
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-17 17:44:53 | 显示全部楼层
本帖最后由 Y.H 于 2012-4-17 17:59 编辑

嗯,附上我写的,写的比较简单,没有用到循环嵌套,希望能帮你理清头绪


  1. assume cs:code   


  2. data segment
  3. db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  4. db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  5. db '1993','1994','1995'
  6. ;年份

  7. dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  8. dd 345980,590827,803530,1183000,1843000,2759000,3753000,4549000,5937000
  9. ;21年来每一年的总收入

  10. dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  11. dw 11542,14430,15257,17800
  12. ;21年来每一年的雇员
  13. data ends   



  14. table segment

  15. db 21 dup ('year summ ne ?? ')

  16. table ends   



  17. code segment  

  18. start:

  19.                 mov  ax,data
  20.                 mov  ds,ax  

  21.                 mov  ax,table
  22.                 mov  es,ax  

  23.                 mov  ax,0
  24.                 mov  bx,0
  25.                 mov  si,0
  26.                 mov  di,0
  27.                
  28.                
  29.                 ;先把年份送入table段的前2个字中
  30.                 mov  cx,21
  31. year:
  32.                 mov  ax,ds:[si]
  33.                 mov  es:[bx+di],ax       
  34.                 add  si,2
  35.                 add  di,2
  36.                 mov  ax,ds:[si]
  37.                 mov  es:[bx+di],ax
  38.                 add  si,2
  39.                 sub  di,di
  40.                 add  bx,10h
  41. loop year

  42.   

  43.   

  44.                 mov  ax,0
  45.                 mov  bx,0
  46.                 mov  si,84
  47.                 mov  di,0
  48.                 ;把收入送入table段的5,6,7,8字节中
  49.                 mov  cx,21
  50. summ:
  51.                 mov  ax,ds:[si]
  52.                 mov  es:[bx+di+5h],ax
  53.                 add  si,2
  54.                 add  di,2
  55.                 mov  ax,ds:[si]
  56.                 mov  es:[bx+di+5h],ax
  57.                 add  si,2
  58.                 mov  di,0
  59.                 add  bx,10h
  60. loop summ
  61.   

  62.   

  63.                 mov  ax,0
  64.                 mov  bx,0
  65.                 mov  si,168
  66.                 ;把雇员人数送入table段的a,b字节中
  67.                 mov  cx,21
  68. guyuan:
  69.                 mov  ax,ds:[si]
  70.                 mov  es:[bx+0ah],ax
  71.                 add  si,2
  72.                 add  bx,10h
  73. loop guyuan

  74.   

  75.   

  76.                 mov  di,0
  77.                 mov  si,0
  78.                 mov  bx,0
  79.                 ;算出人均工资,取商AX,放入table段的d,e字节中
  80.                 mov  cx,21
  81. jieguo:
  82.                 mov  ax,es:[bx+di+5h]
  83.                 add  di,2
  84.                 mov  dx,es:[bx+di+5h]
  85.                 sub  di,di
  86.                

  87.                 div  word ptr es:[bx+0ah]
  88.                 mov  es:[bx+0dh],ax

  89.                 add  bx,10h

  90. loop jieguo  

  91.   

  92.         mov  ax,4c00h
  93.                         int  21h

  94. code ends

  95. end start
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-17 17:59:22 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-17 18:00:28 | 显示全部楼层
莫名其妙 发表于 2012-4-17 17:40
code segment
start:mov ax,stack
      mov ss,ax 《------运行这一条的时候就挂了!!!

谢谢你的提示,回头我去找找看
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 13:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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