zhongxm 发表于 2013-11-17 22:08:53

王爽第二版第八章习题

王爽第二版第八章习题代码
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个字节的数据发生变化。


望道友给点儿提示。

LinuxDeepin 发表于 2013-11-18 06:16:40

执行 mov ss,ax 后,下一条指令是 mov sp,15 (F)
debug 自动执行了该指令,然后指向下一条指令 mov bx,0

也就是说类似 mov sp,10H 的指令,debug 都会自动执行,无法单步跟踪

小9 发表于 2013-11-18 09:17:50

进来学习一下。。。

zhongxm 发表于 2013-11-18 09:32:19

mov sp,15这条指令应该移到S循环中的前边,
我现在就不明白,为什么执行完这条指令后,栈空间中的数据就发生变化了

zhongxm 发表于 2013-11-18 14:51:07

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]
查看完整版本: 王爽第二版第八章习题