这是什么错误?
如题, ??书第280页,下边
mov word ptr es:.offset int9;;这条语句在DEBUG 中,T命令后出现,上面提示 替换,int 9 ,地址失败,求解{:1_1:} assume cs:code,ds:date,ss:stack
date segment
dw 0,0
date ends
stack segment
dw 128 dup(0)
stack ends
code segment
start:
mov ax,date
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,128
mov ax,0
mov es,ax
push es:
pop ds:
push es:
pop ds:
mov word ptr es:,offset int9
mov word ptr es:,cx
mov ax,0b800h
mov es,ax
mov ah,'a'
s: mov es:,ah
inc ah
call stop
cmp ah,'z'
jna s
mov ax,0
mov es,ax
push ds:
pop es:
push ds:
pop es:
mov ax,4c00h
int 21h
stop: push ax
push bx
mov bx,2000h
mov ax,0
s1: sub ax,1
sbb bx,0
cmp ax,0
jne s1
cmp bx,0
jne s1
pop bx
pop ax
ret
int9:
push ax
push es
push bx
in al,60h
pushf
pushf
pop bx
and bh,11111100b
push bx
popf
call dword ptr ds:
cmp al,1
jne ok
mov ax,0b800h
mov es,ax
inc byte ptr es:
ok: pop bx
pop es
pop ax
iret
code ends
end start
上面的和书上差不多一样的;
为什么,可以通过编译,但无法执行;
在DEBUE中,单步执行第28行时出错??? 疑问:
第81到83行也进行了三次压栈………第94行代码,其中包函了IP和Cx的压栈……106行到108行对应81到83行出栈……110行 iret 其中包函CX和IP和出栈。
问题 ,压栈和出栈应该相对应,这样压进去的和取出来的,才能相对应即:81-83压然后106至108出栈,而在83到106中有压栈 第94行进行了二次压栈,到106行之前没有出栈,而到110行才有出栈???
由上面看到,二组压栈和出栈,相互交差????
上面程序80行到110行,能得到想到的结果,那么,存在二个不同的栈??分别记录81-83压106-108出,和94行压--110行出??
求解???
对了,110行的出栈,还包括了86行标志寄存器的出栈;
按我的理解,应该把110代码移到106行之前,这样压栈和出栈的顺序才正确。(可真的那么移了,110行的iret 就返回原程序去了,后面106-108三个出栈,将不会被执行,可见是错的) 走过,路过,不如停下歇歇脚,指点指点{:1_1:} 各位高手,停停脚,帮我看看呀{:1_1:} :mad: 没人帮顶:mad:,没人回贴:mad: 这个没给悬赏,是因为,我当时,还没弄明白怎么弄悬赏
页:
[1]