汇编网首页登录博客注册
ryan1779的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
文章收藏
友情链接

[2009-07-25 13:08] 实验7

哎,写了错,错了改,改了还错。现在不知道错在哪里了?请老师看看
assume cs:codesg

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 345980,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

codesg segment

start:mov ax,data
      mov ds,ax
      mov ax,table
      mov es,ax
      mov bx,0
      mov di,0
      mov cx,21

   s0:mov bp,cx
      mov si,0
      mov cx,2

    s:mov ax,[di]
      mov es:[bx][si],ax  
      mov ax,54h[di]
      mov es:5h[bx][si],ax
      add si,2
      add di,2
      loop s

      mov ax,0a8h[bx]
      mov es:0ah[bx],ax

      mov dx,es:7h[bx]
      mov ax,es:5h[bx]
      div word ptr es:0ah[bx]
      mov es:0dh[bx],ax
      add bx,16
      mov cx,bp
      loop s0

      mov ax,4c00h
      int 21h

codesg ends

end start
------------------------------------------------------
------------------------------------------------------
在debug里是这样的

AX=0068  BX=0040  CX=0012  DX=0004  SP=0000  BP=0012  SI=0004  DI=0010
DS=0B82  ES=0B90  SS=0B82  CS=0BA5  IP=004B   NV UP EI PL NZ NA PO NC
0BA5:004B E2C6          LOOP    0013
-d es:0
0B90:0000  31 39 37 35 20 10 00 00-00 20 02 00 20 08 00 20   1975 .... .. ..
0B90:0010  31 39 37 36 20 16 00 00-00 20 0C 00 20 01 00 20   1976 .... .. ..
0B90:0020  31 39 37 37 20 7E 01 00-00 20 39 00 20 06 00 20   1977 ~... 9. ..
0B90:0030  31 39 37 38 20 4C 05 00-00 20 0D 00 20 68 00 20   1978 L... .. h.
0B90:0040  79 65 61 72 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   year summ ne ??
0B90:0050  79 65 61 72 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   year summ ne ??
0B90:0060  79 65 61 72 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   year summ ne ??
0B90:0070  79 65 61 72 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   year summ ne ??
-

可是搞到后面提示我说溢出了。我现在都不知道这样做是不是符合题意~!!
评论次数(5)  |  浏览次数(605)  |  类型(汇编作业) |  收藏此文  | 

[  tinyparticle   发表于  2009-07-26 20:04  ]

mov ax,0a8h[bx] 
     mov es:0ah[bx],ax
  
这里好像[bx]指向有问题,后面有条指令add bx,16,数据段中的偏移地址更改后,指向会出现错误

[  younggay   发表于  2009-07-27 09:45  ]

除法溢出,说明做运算的两个数据可能有点问题。你单步跟踪,看看到底是哪里出现溢出,看一下此时的两个数据是不是弄错了,书上给出的数据应该不会溢出的。
查找问题的时候,要尽可能的细节,从面上来看有时候很难看到问题所在。
现在是锻炼你debug单步调试的好机会,我相信博主会自己界定出问题出在什么地方的。

[  younggay   发表于  2009-07-27 09:53  ]

mov ax,0a8h[bx]  
===================
怎么是0a8H的起始偏移啊?!定位错了吧?你debug看看这里给ax的数据是你data段中的数据么?!

[  younggay   发表于  2009-07-27 10:11  ]

上面的地址计算看明白了,是手动计算的,没什么问题。呵呵

不过,我跟踪了一下,你的程序在寻址想内存中写入数据的时候,公司雇员好像有问题,你可以debug下T命令跟踪一下,看一下每次你写入内存中的数据是不是都正确?然后你可以看一下你的div指令的时候,除数和被除数的数据是否都是正确的数据,我跟踪了一下,发现从数据有问题。你耐心debug下看一下。

[  ryan1779   发表于  2009-07-28 10:58  ]

感谢ls几位的热心解答,总于搞出来了。
mov ax,0a8h[bx],bx出错了,又多用了个寄存器就把问题解决了。
看来学汇编一定要仔细啊。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码