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-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
{:1_1:} taochen 发表于 2015-4-19 21:26
什么情况?问题已经放在这里好多天了,求大神给答复
:sweat: 同啊。我只是编了了几段而已,就出现这个 debug 文件名.exe 改一下文件名 应该是文件名太长了,貌似是8个字节。 zZwal3 发表于 2015-9-6 12:13
同啊。我只是编了了几段而已,就出现这个
我也是我也是,
页:
[1]