Prolearning 发表于 2015-4-17 19:48:08

debug一个程序出现extended error 2如何解决

本帖最后由 Prolearning 于 2015-4-19 22:12 编辑




这是我自己写的汇编作业实验七,编译没问题,但她提醒了我没有设置栈段。生成程序后就想debug一下,然后就报出extended error 2的错误。
assume cs:codesg,ds:data,es:table,ss:stacksg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985'
db '1986','1987','1988','1989','1990','1991','1992','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

stacksg segment
db 0,0,0,0,0
stacksg ends

codesg segment
start:mov ax,table
      mov es,ax
      mov ax,data
      mov ds,ax
      mov ax,stacksg
      mov ss,ax
      mov sp,6
      mov di,0
      mov cx,21
    s:push cx
      mov cx,4
      s1:mov bx,0
         mov si,0
         mov al,byte ptr ds:
         mov byte ptr es:,al
         mov al,byte ptr ds:
   mov byte ptr es:,al
         inc bx
   inc si
   loop s1
      pop cx
      add di,16
      loop s
      
      
      mov si,0
      mov cx,21
      mov di,0
    s2:push cx
      mov cx,2
      s3:mov bx,0
         mov al,byte ptr ds:
         mov byte ptr es:,al
         inc bx
   inc di
   loop s3
      pop cx
      add si,4
      loop s2
      mov bx,0
      mov cx,21
    s4:mov ax,es:
       mov dx,es:
       div word ptr es:
       mov es:,ax
       add bx,16
       loop s4

       mov ax,4c00h
       int 21h
codesg ends
end start

KTMONREK 发表于 2015-4-17 19:48:09

本帖最后由 KTMONREK 于 2015-4-21 09:45 编辑

<div class="blockcode"><blockquote>assume cs:codesg,ds:data,es:table,ss:stacksg      
data segment                                  ;错误的地方我在下方注释了
db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985'
db '1986','1987','1988','1989','1990','1991','1992','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

stacksg segment
dw 0,0,0,0,0                     ;栈的定义用dw,不然后面会出错
stacksg ends

codesg segment
start:mov ax,table
      mov es,ax
      mov ax,data
      mov ds,ax
      mov ax,stacksg
      mov ss,ax
      mov sp,10      ;修改栈顶指针
      mov di,0
          mov si,0         ;si的位置改到这里
      mov cx,21
    s:push cx
      mov cx,4
      mov bx,0
                        ;你原本mov si,0写在这里,每次进入循环都只是读data段第一个字节
   s1:   mov al,byte ptr ds:   ;更改s1的位置
         mov byte ptr es:,al
         mov al,byte ptr ds:
   mov byte ptr es:,al
         inc bx
   inc si
   loop s1
      pop cx
      add di,16
      loop s
      
      
      mov si,0
          mov di,0
      mov cx,21
      
    s2:push cx
          mov bx,0                     ;把这句放到这里,不然每次进入循环都会置bx为0
      mov cx,2
      s3:                              ;把 mov bx,0放在这里的话,你后面的inc bx就没有意义了
         mov al,byte ptr ds:
         mov byte ptr es:,al
         inc bx
   inc di
   loop s3
      pop cx
      add si,16                        ;table段的下一行,是16,不是4
      loop s2
         
      mov bx,0
      mov cx,21
    s4:mov ax,es:            ;高低位你弄反了,所以会发生除法溢出
       mov dx,es:                        ;把5和7换过来
       div word ptr es:
       mov es:,ax
       add bx,16
       loop s4

       mov ax,4c00h
       int 21h
codesg ends
end start


taochen 发表于 2015-4-19 21:26:50

{:1_1:}

Prolearning 发表于 2015-4-19 22:11:49

taochen 发表于 2015-4-19 21:26


什么情况?问题已经放在这里好多天了,求大神给答复

xubo 发表于 2015-4-22 09:42:58

:sweat:

zZwal3 发表于 2015-9-6 12:13:21

同啊。我只是编了了几段而已,就出现这个

kmaster 发表于 2015-9-14 14:42:16

debug 文件名.exe

ddddds 发表于 2016-4-14 09:10:32

改一下文件名

u654f 发表于 2016-5-5 22:00:39

应该是文件名太长了,貌似是8个字节。

灰灰灰 发表于 2017-10-12 16:45:20

zZwal3 发表于 2015-9-6 12:13
同啊。我只是编了了几段而已,就出现这个

我也是我也是,
页: [1]
查看完整版本: debug一个程序出现extended error 2如何解决