汇编网首页登录博客注册
fpamc的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态

[2012-03-14 21:16] 第六章作业(2)

(2)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题。
assume cs:code,ds:data,ss:stack 
data segment 
        dw 0123h,0456h
data ends 
stack segment 
        dw 0,0
stack ends 
code segment 
start:  mov ax,stack 
        mov ss,ax 
        mov sp,16 
        mov ax,data 
        mov ds,ax 
        push ds:[0] 
        push ds:[2] 
        pop ds:[2] 
        pop ds:[0] 
        mov ax,4c00h 
        int 21h 
code ends 
end start 

C:\MASM>debug q.exe
-r
AX=0000  BX=0000  CX=0042  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=14CA  ES=14CA  SS=14DA  CS=14DC  IP=0000   NV UP EI PL NZ NA PO NC
14DC:0000 B8DB14        MOV     AX,14DB
-u
14DC:0000 B8DB14        MOV     AX,14DB
14DC:0003 8ED0          MOV     SS,AX
14DC:0005 BC1000        MOV     SP,0010
14DC:0008 B8DA14        MOV     AX,14DA
14DC:000B 8ED8          MOV     DS,AX
14DC:000D FF360000      PUSH    [0000]
14DC:0011 FF360200      PUSH    [0002]
14DC:0015 8F060200      POP     [0002]
14DC:0019 8F060000      POP     [0000]
14DC:001D B8004C        MOV     AX,4C00
-d 14da:0 3
14DA:0000  23 01 56 04                                       #.V.
-g 001d

AX=14DA  BX=0000  CX=0042  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000
DS=14DA  ES=14CA  SS=14DB  CS=14DC  IP=001D   NV UP EI PL NZ NA PO NC
14DC:001D B8004C        MOV     AX,4C00
-d 14da:0 3
14DA:0000  23 01 56 04                                       #.V.
-t

AX=4C00  BX=0000  CX=0042  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000
DS=14DA  ES=14CA  SS=14DB  CS=14DC  IP=0020   NV UP EI PL NZ NA PO NC
14DC:0020 CD21          INT     21
-p

Program terminated normally

①CPU执行程序,程序返回前,data段中的数据 不变 。 
②CPU执行程序,程序返回前,CS= 14dcH ,SS= 14dbH ,DS= 14daH 。
③设程序加载后,CODE段的段地址为X,则DATA段的段地址为 X-2 ,STACK段的段地址为 X-1 。
④对于如下定义的段:
name segment
……
name ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为 ((N+15)/16)*16 。

④解析:
N分为被16整除和不被16整除。 
当N被16整除时: 占有的空间为(N/16)*16 
当N不被16整除时: 占有的空间为(N/16+1)*16,N/16得出的是可以整除的部分,还有一个余数,余数肯定小于16,加上一个16。
程序加载后分配空间是以16个字节为单位的,也就是说如果不足16个字节的也分配16个字节。 
两种情况总结成一个通用的公式:((N+15)/16)*16 

这道题,学生只是抽象的理解规律,具体的表达和这个公式的由来,完全不懂!望老师讲解。
评论次数(11)  |  浏览次数(306)  |  类型(汇编作业) |  收藏此文  | 

[  tomato   发表于  2012-03-14 23:33  ]

没问题。

[  fpamc   发表于  2012-03-14 23:43  ]

老师啊~第四问的解析有问题!!!!
我虽然理解含义,但是这个公式的由来和计算不懂……

[  tomato   发表于  2012-03-15 00:01  ]

可以分两种情况分别说明。但是,我看这个公式也是对的。它很奇妙,巧妙的区分了是否能被16整除,如果能被16整除,不会加一,如果不能被16整除,则要加一。这属于数学范畴,关键是明白段的分配原理就可以了。

[  fpamc   发表于  2012-03-15 00:10  ]

还是没懂……

[  chinatree   发表于  2012-03-15 08:40  ]

设n为16和17试试。

[  fpamc   发表于  2012-03-15 10:22  ]

当n=16
占16字节~
当n=17
占32字节~

规律明白,就是不会推出这个公式……

[  chinatree   发表于  2012-03-15 11:23  ]

(n%16)?(n/16+1)*16:n
这个总能明白吧?
其实求解一个数学问题方法很多,不一定要按别人的方法来,有时可以试着想出一种属于自己的办法。

[  fpamc   发表于  2012-03-15 12:20  ]

那个~不明白~
嘿嘿~我初中毕业~
(n%16)?(n/16+1)*16:n这个就更不明白了~

[  chinatree   发表于  2012-03-15 16:45  ]

?: 是c里的一个运算符,意思是说如果问号前的(表达式的)值不为0,就返回问号后的(表达式的)值,否则返回冒号后的(表达式的)值。

[  fpamc   发表于  2012-03-15 22:29  ]

那个,百分比号呢?

[  chinatree   发表于  2012-03-16 08:43  ]

求余数,就是取模。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码