. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第二章检测点 望大家帮忙指错!  [待解决] 回复[ 13次 ]   点击[ 476次 ]  
comducs
[帖 主]   [ 发表时间:2009-08-08 13:26 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-08-02 21:21
1000:0 mov ax,8 
      1000:3 jmp ax 
      1000:5 mov ax,0 
      1000:8 mov bx,ax 
      1000:a jmp bx 
     CPU从1000:0处开始执行指令当执行完1000:a处的指令后CPU几次修改IP_____。 
 1、  4 
 2、  5 
 3、  6 
 4、  7 

 这题我是选4(7次)
    
   


  
       mov ax,936aH 
      mov bx,79b8H 
      add ax,bx 
     指令执行后AX中的数据是:____ 
 1、  1c22H 
 2、  0c22H 
 3、  0d22H 
 4、  1d22H 

这题我是选4(1d22H )






下列说法中正确的是:____ 
 1、  8086CPU采用“段地址*16+偏移地址=物理地址”的寻址模式,所以内存是由一个一个的段组成,每一个段有一个段地址。 
 2、  物理地址为ffff0H的内存单元的偏移地址可能为ffffH。 
 3、  一个段的大小可以是8Byte。 
 4、  在一段没有任何跳转指令的程序中,超出64K的部分将不会被执行 

这题我是选3



下列地址信息与0020H:03EFH确定的内存地址不同的是_____。 
 1、  5EFH 
 2、  203H:00EFH 
 3、  005EH:000FH 
 4、  0002H:05CFH 

这题我是选2



结果只对了两题,都不知道错了哪里
ce54605802
[第1楼]   [ 回复时间:2009-08-08 16:17 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:0
注册日期:2009-07-21 14:42
你最好写出你的思想啊。比如第一题7次分别都是哪7次
第一题,我选6次
第二题,0D22选3(你选4个原因是什么呢?)
第三题,我选4.
第四题,我选2,(和你一样)
ce54605802
[第2楼]   [ 回复时间:2009-08-08 16:23 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:0
注册日期:2009-07-21 14:42
1000:0 mov ax,8   1次修改
1000:3 jmp ax     2次修改,3次修改
1000:5 mov ax,0    
1000:8 mov bx,ax  4次修改
1000:a jmp bx     5次修改,6次修改
ce54605802
[第3楼]   [ 回复时间:2009-08-08 16:24 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:0
注册日期:2009-07-21 14:42
第二题,就是简单的两个数字相加,用计算机就可以算出来是10D22  1超出了限度所以暂时扔掉 就是0D22
ce54605802
[第4楼]   [ 回复时间:2009-08-08 16:25 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:0
注册日期:2009-07-21 14:42
第3题,我是用DEBUG测试的,超过了64K的程序,执行到64K以外DEBUG就自动关闭了,貌似是崩溃了。所以不能执行
ce54605802
[第5楼]   [ 回复时间:2009-08-08 16:26 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:0
注册日期:2009-07-21 14:42
第4题,你的算法正确没什么好说的
ce54605802
[第6楼]   [ 回复时间:2009-08-08 16:35 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:0
注册日期:2009-07-21 14:42
我只能确定第二题你肯定是做错了
comducs
[第7楼]   [ 回复时间:2009-08-08 16:56 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-08-02 21:21
1000:0 mov ax,8  
      1000:3 jmp ax  
      1000:5 mov ax,0  
      1000:8 mov bx,ax  
      1000:a jmp bx  
     CPU从1000:0处开始执行指令当执行完1000:a处的指令后CPU几次修改IP_____。  
 1、  4  
 2、  5  
 3、  6  
 4、  7  
 

我是这样算的:

         1000:0 mov ax,8  第1次修改 
          1000:3 jmp ax    第2次修改,第3次修改 
          1000:5 mov ax,0   第4次修改  
         1000:8 mov bx,ax  第5次修改 
          1000:a jmp bx     第6次修改,第7次修改
comducs
[第8楼]   [ 回复时间:2009-08-08 16:59 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-08-02 21:21
第二题,就是简单的两个数字相加,用计算机就可以算出来是10D22  1超出了限度所以暂时扔掉 就是0D22,我没看清楚,忽略了AX是16位,而结果数据是20位。
comducs
[第9楼]   [ 回复时间:2009-08-08 17:34 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-08-02 21:21
第三题:
       1、  8086CPU采用“段地址*16+偏移地址=物理地址”的寻址模式,所以内存是由一个一个的段组成,每一个段有一个段地址。 
  (这个肯定是错。内存没分段。)

       2、物理地址为ffff0H的内存单元的偏移地址可能为ffffH。
  
    (设基地址为SA,则SA+FFFFH=FFFF0H ,SA= EFFF1H , 段地址*16= EFFF1H  , 段地址 = EFF1H,计算没错的话就对了)
     

     3、  一个段的大小可以是8Byte。

    (段地址是CPU对 所有内存单元的 物理地址 进行 分段分组 划分 后得到的 内存单元群 的特殊地址编号,
     所以一个段的内存可以是很大或者很小的。)

    4、  在一段没有任何跳转指令的程序中,超出64K的部分将不会被执行 

  (我还不会用debug,你试过了就在这算它是对的)

变成2,3,4选项都是对的.....
ce54605802
[第10楼]   [ 回复时间:2009-08-08 18:54 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:0
注册日期:2009-07-21 14:42
TO 7楼
1000:0 mov ax,8  第1次修改  
1000:3 jmp ax    第2次修改,第3次修改  
///////////////////////////////////////
1000:5 mov ax,0   第4次修改  (这句由于上句的跳转,所以没有被执行,所以没有修改IP所以这次不算) 
/////////////////////////////////////
1000:8 mov bx,ax  第5次修改  
1000:a jmp bx     第6次修改,第7次修改
ce54605802
[第11楼]   [ 回复时间:2009-08-08 19:13 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:0
注册日期:2009-07-21 14:42
1、  8086CPU采用“段地址*16+偏移地址=物理地址”的寻址模式,所以内存是由一个一个的段组成,每一个段有一个段地址。  
// 第一个公认是错误的不说了。
 2、  物理地址为ffff0H的内存单元的偏移地址可能为ffffH。  
//这个你的算法有问题。
//FFFF0H-FFFFH=EFFF1H
//这个EFFF1H必须能被16整除才可以,也就是说结尾必须是0,这个EFFF1H不能被16整除,所以不合理。
// X*16=EFFF1H   X=61439.0625  X不是整数,所以不合法。

 3、  一个段的大小可以是8Byte。  
//一个段不是可以很大,也不是可以很小,书的第24页明确说明,一个段的最大程度为64K。
//至于最小是多少呢?还要考虑考虑,我认为,既然段的起始地址必须是16的倍数,那么最小的段应该是16Byte
 4、  在一段没有任何跳转指令的程序中,超出64K的部分将不会被执行  
//根据书上的内容,一个段的最大程度为64K。我经过测试,超过段后再执行,就会又回到段首地址去执行,这也是用DEBUG出错的原因。
comducs
[第12楼]   [ 回复时间:2009-08-08 20:38 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-08-02 21:21
to  10楼。

1000:3 jmp ax    第2次修改,第3次修

1000:5 mov ax,0   第4次修改  (这句由于上句的跳转,所以没有被执行,所以没有修改IP所以这次不算)

  你意思是遇到这种  mov ax,0 的情况,IP都不会改变啊? 和上句的 JMP AX 有啥关系啊?

 书上说 在CPU执行程序时,IP会变成:IP原值+下一段要读取的指令的长度
 
 那么 在执行MOV ax ,0后,ip应该会改变指向下一条指令啊。

  你说的不执行是什么原因呢?
  
   请详解~~
ce54605802
[第13楼]   [ 回复时间:2009-08-08 23:21 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:0
注册日期:2009-07-21 14:42
TO 12楼
1000:0 mov ax,8  第1次修改   //AX=8 
1000:3 jmp ax    第2次修改,第3次修改   //这句的意思是IP改成0008,

1000:5 mov ax,0   没有修改  //因为上句IP改成0008了,因此程序被跳转到1000:8处执行,这句没有被执行  
1000:8 mov bx,ax  第4次修改   //BX被修改成AX的数值这里BX为8
1000:a jmp bx     第5次修改,第6次修改 //这里IP又被改成8了,跳转到1000:8处执行,
//
以后就一直在1000:8和1000:a处无限循环,由于这就是个测试题,不考虑死循环,所以程序到这里结束。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved