|
主题 : : 第二章的测试题,看看到底哪道题错了 [待解决] |
回复[ 19次 ]
点击[ 1053次 ] | |
荣誉值:0
信誉值:0
注册日期:2008-08-24 08:57 |
我想说,其实楼主全对了.
我主要要澄清一下第三题,首先说说64K代码段的问题,在段地址不改变的情况下,64K确实是段的最大范围了.现在
"因为无jmp时,执行命令后IP会自动修改,而CS不会自动修改"
缺少jmp指令,只能说不能直接修改cs的值,但我们可以间接修改嘛,上面的仁兄已经回答了.
"可以通过mov指令修改cs的值,如:
mov bx,2000H
mov cs,bx
这样没有jmp指令也可以执行超过64K的代码。"
我要补充的是,上面那个";"可不能要,在汇编程序中,";"后面的内容会被编译器忽略哦,那是注释标记哟!
现在我主要想说说这个"一个段的大小可以是8Byte"
先说一点,书上可只说了一个段最大也就64K,并未说段的最小值.
请注意一下,2.12代码段中的例子
比如,将:
mov ax,0000 (B8 00 00)
add ax,0123 (05 23 01)
mov bx,ax (8B D8)
jmp bx (FF E3)
这段长度为10个字节的指令,存放在123B0H~123B9H的一组内存单元中,我们就可以认为,123B0H~123B9H这段内存是用来存放代码的,是一个代码段,它的段地址为123BH,长度为10个字节.
既然10个字节也可以成段,那8个字节当然也可以哦.注意是8Byte,不过话说回来,就是8bit,一个字节也成呀.比如10000H,段地址1000H,偏移地址为0H.不过,这样只有一个内存单元的段就没啥意义了.这就好比,只有一个元素的数组,与单个的变量无异,那这样的数组不是多此一举嘛!
记住,段主要范指了一连续的内存地址单元,只要是连续的,就可以成段.其实,这与高级语言里面的数组很相似.
如果有不足之前,尚请斧正. | | |