CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

《汇编语言》王爽版 中的一个错误!

楼主GodSpeed513(GodSpeed513)2006-02-23 14:50:16 在 其他开发语言 / 汇编语言 提问

在书的52页,检测点3.1  
  第一小题    
  题目给出  
  0000:0000   70   80   F0   30   EF   60   30   E2-00   80   80   12   66   20   22   60  
  0000:0010   62   26   E6   D6   CC   2E   3C   3B-AB   BA   00   00   26   06   66   88  
   
  问题:  
  mov   ax,1                           (这地放应该是   mov   ax,0     ,否则后面的就没法做了)  
  mov   ds,ax  
  mov   ax,[0000]                               ax=?  
  ..................  
   
  第二小题  
  我发现只能执行右边的代码,左边的代码永远也执行不到!  
   
  望有这本书的朋友们一起讨论! 问题点数:20、回复次数:25Top

1 楼mydo(侯佩|hopy|ks)回复于 2006-02-23 20:04:15 得分 0

木有,帮顶Top

2 楼DelphiGuy()回复于 2006-02-23 21:30:30 得分 0

mov   ax,1  
  mov   ds,ax  
  应该没有问题,之后的mov   ax,[0000]就是ax=2662。  
  Top

3 楼lynx090(黑色的风)回复于 2006-02-23 23:26:53 得分 0

这本书我看过,非常适合汇编入门的,我记得讲CPU执行指令流程,作者就用了很多图来描述,实在是难得的一本好书.Top

4 楼GodSpeed513(GodSpeed513)回复于 2006-02-24 11:17:59 得分 0

DelphiGuy,你说的我不理解!  
  我认为    
  mov   ax,1  
  mov   ds,ax  
  mov   ax,[0000]  
  那么访问的地址就应该是   0001:0000Top

5 楼DelphiGuy()回复于 2006-02-24 13:09:12 得分 5

在实模式下,0001:0000   =   0000:0010。:)  
   
  Top

6 楼koalapheonix()回复于 2006-02-24 22:52:22 得分 0

DelphiGuy说的是对的  
  我认为  
  书应该没有问题Top

7 楼GodSpeed513(GodSpeed513)回复于 2006-02-25 11:40:28 得分 0

谢谢DelphiGuy,我用DEBUG看过了,的确象你说的0001:0000   =   0000:0010,可以给我解释一下原理吗?  
  还有就是第二小题,也帮我解答一下!谢谢了!Top

8 楼DelphiGuy()回复于 2006-02-25 11:51:42 得分 0

x86的实模式是seg   *   16   +   offset形成物理地址,所以就是那样子了。  
  另外我没有这本书,所以不知道第二小题是什么。  
  Top

9 楼chw_csdn_chw(chw)回复于 2006-02-27 11:11:12 得分 0

0001:0000   =   0000:0010  
  是怎么转换的?Top

10 楼zquboy()回复于 2006-02-27 22:35:47 得分 5

0001:0000   =   0000:0010  
   
  0001:0000物理地址   =>   00010  
  0000:0010物理地址   =>   00010  
   
  原理,段值   *   16,其实是左1位,只要在段值后加一个0,然后和偏移相加。  
   
  另外,逻辑段的开始地址必须为16的倍数,所以0001自然就是0000的1个倍数了。Top

11 楼jy02870694(逍遥)回复于 2006-02-28 14:26:46 得分 0

请问楼主和大家,这本书第18页检测点2.1  
  (2)编程计算2的4次方?  
  23页   给定段地址1000H,用偏移地址寻址,CPU的寻址范围为:10000H~1FFFFH   ?CPU寻址范围是怎么得出来的,请给予解释一下?在此先感谢。  
  我在这被卡住了,无法继续学下去Top

12 楼DelphiGuy()回复于 2006-02-28 16:18:52 得分 0

1.   mov   ax,2  
        mov   cl,3  
        shl   ax,cl  
   
  2.  
  一个段内的偏移只能是0000h-ffffh,所以1000h段对应的地址就是1000h   *   16   +   0000h   -   1000h   *   16   +   0ffffh。  
  Top

13 楼jy02870694(逍遥)回复于 2006-03-06 16:26:25 得分 0

谢谢DelphiGuy,再请教本书44页,利用mov add   jmp这三个指令计算2的8次方.  
   
  Top

14 楼DelphiGuy()回复于 2006-03-07 13:29:10 得分 0

应该不需要用jmp吧。  
  mov   ax,2  
  add   ax,ax  
  add   ax,ax  
  add   ax,ax  
  add   ax,ax  
  add   ax,ax  
  add   ax,ax  
  add   ax,ax  
   
  Top

15 楼GodSpeed513(GodSpeed513)回复于 2006-03-07 22:02:31 得分 0

先谢谢DelphiGuy()和zquboy()   两位了!  
  这本书第18页检测点2.1  
  我写的  
  mov   ax,2  
  add   ax,ax  
  add   ax,ax  
  add   ax,axTop

16 楼GodSpeed513(GodSpeed513)回复于 2006-03-07 22:13:11 得分 0

第二小题  
  内存情况如下:  
   
  左边  
  10000H     B8  
  10001H     00  
  10002H     20     MOV   AX,2000H  
  10003H     8E  
  10004H     D8     MOV   DS,AX  
  10005H     A1      
  10006H     08  
  10007H     00     MOV   AX,[0008]  
  10008H     A1  
  10009H     02  
  1000AH     00     MOV   AX,[0002]  
   
  右边  
  20000H     B8  
  20001H     22  
  20002H     66     MOV   AX,6622H  
  20003H     EA  
  20004H     00  
  20005H     01  
  20006H     F0      
  20007H     0F     JMP   0FF0:0100  
  20008H     89  
  20009H     C1     MOV   BX,AX  
   
  各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0  
  1。写出CPU执行的指令序列(用汇编写)  
   
  请大家帮忙看看!谢谢了  
  Top

17 楼coolswordsman(风寒剑客)回复于 2006-03-09 05:54:08 得分 0

学习中。。呵呵。Top

18 楼jy02870694(逍遥)回复于 2006-03-09 16:20:28 得分 5

各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0  
  1。写出CPU执行的指令序列(用汇编写)  
  -----------------------------------------  
  我做的是:  
  1、   mov   ax,6622  
  2、   jmp   0ff0:0100  
  3、   mov   ax,2000  
  4、   mov   ds,ax  
  5、   mov   ax,[0008]  
  6、   mov   ax,[0002]  
   
  顺便问一下本书61页的   问题3.8  
  mov   ax,1000H  
  mov   ss,ax  
  mov   sp,0010H  
  mov   ax,001AH  
  mov   bx,001BH  
  push   ax  
  push   bx  
  sub   ax,ax  
  sub   bx,bx  
  pop   bx  
  pop   ax  
  我在机器上试过了,代码根本执行不到mov   sp,0010H这句,我把cs=1000,ip=0000,当执行完  
  mov   ax,1000H  
  ip=0003,  
  再执行完mov   ss,ax这句,    
  ip=0008了,所以就执行不到mov   sp,0010H这句。  
  mov   ss,ax的机器码是两个字节,不应该是5个字节啊  
  请大家帮忙看看!谢谢了  
  Top

19 楼GodSpeed513(GodSpeed513)回复于 2006-03-10 09:57:22 得分 0

谢谢jy02870694(逍遥)Top

20 楼q63996955(wolf小强)回复于 2006-03-11 16:54:44 得分 0

恩,小弟正在看那本书,书确实是非常棒,但是其中也确实存在一些小的问题的!Top

21 楼CrazyDogHH3(浪漫如枫)回复于 2006-03-12 18:56:46 得分 0

这本书蛮好的~~可是就是有一个问题到后面代码里面常常用到10进制的看了很是不爽..Top

22 楼paullbm(显示器失明,内存失忆,CPU失针,硬盘失身,网卡失踪!!)回复于 2006-03-13 23:08:09 得分 0

一句话:这页没错。Top

23 楼YYLFYY(云之毅)回复于 2006-03-18 23:19:30 得分 5

To:jy02870694(逍遥)  
   
  CPU确实执行了mov   sp,0010H这条指令的,只是在Debug中用T命令看不出来,显示直接跳过了这条指令,具体原因请参看《汇编语言》第12章的12小节(响应中断的特殊情况)Top

24 楼fhb13(游途道标)回复于 2006-03-19 12:15:23 得分 0

我看没错Top

25 楼jy02870694(逍遥)回复于 2006-03-20 11:36:43 得分 0

TO:YYLFYY(云之毅)  
  多谢你的帮助Top

相关问题

  • 关于王爽《汇编语言》中的几个错误
  • 谁有王爽的《汇编语言》电子版?
  • 关于汇编语言NOP在80c196中的奇怪错误?
  • 『求助』求电子版的汇编语言习题集
  • 『求助』求电子版汇编语言习题集
  • 有人在学王爽的《汇编语言》没?进来看下!!
  • 王爽的汇编语言真的那么好吗?
  • 汇编语言?
  • 汇编语言
  • 汇编语言

关键词

  • 执行
  • 指令
  • 代码
  • 检测
  • ds
  • 物理
  • cpu
  • ip
  • ax
  • axadd

得分解答快速导航

  • 帖主:GodSpeed513
  • DelphiGuy
  • zquboy
  • jy02870694
  • YYLFYY

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo