. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
主题 : :  第二章的测试题,看看到底哪道题错了  [待解决] 回复[ 19次 ]   点击[ 1053次 ]  
jovon
[帖 主] [ 发表时间:2010-08-20 21:33 ] 
荣誉值:0
信誉值:0
注册日期:2009-11-10 22:43
一 下面关于8086CPU的工作原理描述错误的是(3)
1汇编程序员可以通过对各种寄存器中内容的修改实现对CPU的控制
2CPU在访问内存时,采用“段地址*16+偏移地址”的形式给出要访问的内存单元的物理地址
3任意时刻,CS:IP指向的内容即是此刻CPU正在执行的指令
4传送指令能够更改所有通用寄存器的内容
二下列地址信息与0020H:03EFH确定的内存地址不同的是(2)
1  5EFH
2  203H:00EFH
3  005EH:000FH
4  0002H:05CFH
三下列说法正确的是(3)
1 8086CPU采用“段地址*16+偏移地址=物理地址”的寻址模式,所以内存是由一个一个的段组成,每一个段有一个段地址
2物理地址为ffff0H的内存单元的偏移地址可能为ffffH
3一个段的大小可以是8Byte
4在一段没有任何跳转指令的程序中,超出64K的部分将不会被执行
四下列说法正确的是(4)
1一条指令被执行后,IP的值进行改变
2当CPU执行完当前指令返回debug后CPU就闲下来不再进行工作
3 e命令可以将所有内存单元中的数据进行改变
4 CPU将CS:IP所指向的内存单元中的数据当作指令来执行
五Debug中可以改变内存单元内容的指令(4)
1 d 2 u 3 t 4 a
xiehao315
[第15楼] [ 回复时间:2011-07-01 18:53 ] 
荣誉值: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.不过,这样只有一个内存单元的段就没啥意义了.这就好比,只有一个元素的数组,与单个的变量无异,那这样的数组不是多此一举嘛!
记住,段主要范指了一连续的内存地址单元,只要是连续的,就可以成段.其实,这与高级语言里面的数组很相似.

如果有不足之前,尚请斧正.
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved