王爽第二版第八章习题
王爽第二版第八章习题代码assume cs:code,ds:data,ss:table
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,5947000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5636,8226
dw 11542,14430,15257,17800
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
code segment
start:mov ax,data
mov ds,ax
mov ax,table
mov ss,ax
mov sp,15
mov bx,0
mov bp,84
mov si,168
mov cx,21
s:mov di,ss
mov ax,ds:
mov dx,ds:
div word ptr ds:
push ax
sub sp,1
push
sub sp,1
push ds:
push ds:
sub sp,1
push
push
add bp,4
add si,2
add bx,4
add di,16
loop s
mov ax,4c00h
int 21h
code ends
end start
编译后,debug调试过程中发现,在执行mov ss,ax命令后,栈空间前16个字节的数据发生变化。
望道友给点儿提示。
执行 mov ss,ax 后,下一条指令是 mov sp,15 (F)
debug 自动执行了该指令,然后指向下一条指令 mov bx,0
也就是说类似 mov sp,10H 的指令,debug 都会自动执行,无法单步跟踪 进来学习一下。。。 mov sp,15这条指令应该移到S循环中的前边,
我现在就不明白,为什么执行完这条指令后,栈空间中的数据就发生变化了
assume cs:code,ds:data,es:table
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,5947000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5636,8226
dw 11542,14430,15257,17800
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
code segment
start:mov ax,data
mov ds,ax
mov ax,table
mov ss,ax
mov bx,0
mov bp,0
mov si,0
mov cx,21
s:mov ax,
mov ,ax
mov ax,2
mov 2,ax
mov ax,84
mov 5,ax
mov ax,86
mov 7,ax
mov ax,168
mov 10,ax
mov ax,84
mov dx,86
div word ptr 10
mov 13,ax
add bx,2
add si,2
add bp,10h
loop s
mov ax,4c00h
int 21h
code ends
end start
最终以这样的代码搞定,不知道为什么就不能使用栈。
求高手给指点一下
页:
[1]