新手求助关于内存地址范围和CPU读取指令问题

pm90125 2010-12-30 10:16:07
我是做.net开发的,一直对汇编很有兴趣,目前正在看王爽的汇编语言遇到一些问题不能解决!!求解答!

1.如何直观的理解内存范围 比如0-ffff 或10000-1fffff 都是16进制,完全不理解这个范围到底是多少!如比4G内存 我想找1.5G到2G的范围难道我要换成16进制然后去内存中找么?

2.cpu数据总线是如何算出来的?比如8086有20条总线寻找能力只有1M,如何根据这20条总线算出他的数据总线?

3.书中提到cpu读取内存中的指令,我的问题是这个指令是内存中有的还是cpu给他的?比如ffff这个内存地址里面有一个数字3然后CPU读取里面的值正常理解是把3放到寄存器,但是它读的时候用mov ax 5这个是什么意思呢?

新手求解答!!
...全文
213 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
asmlearn 2010-12-30
  • 打赏
  • 举报
回复
是的,一般1后面7个0表示256M
pm90125 2010-12-30
  • 打赏
  • 举报
回复
我也迷茫着呢!!CPU寻址我知道怎么算的,就是不知道怎么算出他的数据总线的!

这么说像mov 和 add 啥的指令是在内存中的?那如我所问的 ffff这个内存为3 mov ax 5 那ax寄存器里面的值是8么?
一个傻冒 2010-12-30
  • 打赏
  • 举报
回复
兄弟,你的问题有的有些看不懂。
第二个问题的前半句,我知道,20根地址线可寻址的范围是1M,是2的20次方算出来的。
第三题,指令是CPU从内存中读出来的。
pm90125 2010-12-30
  • 打赏
  • 举报
回复
谢谢 楼上 讲解很详细
JustFromHell 2010-12-30
  • 打赏
  • 举报
回复
LZ还需要慢慢看书。。。。王爽的那本已经很是深入浅出了,别急,一点点啃,很快就入门了。
2进制----最基本的概念了。我们用0和1来代表两种状态,如大或小,高或矮,长或短,等等。
计算机里边只有高电平和低电平---我们把高电平称为1,低电平称为0

计算机里的一个位,或考察具体某根地址线的时候,有几种可能的状态?2种。高电平或低电平,或者说,是1或者0。

把2根地址线一起来考虑的话,有几种状态?4种--00 01 10 11。

N根地址线总共有多少种不同状态?答案是2的N次方。

32根地址线有2^32=2^2*2^10*2^10*2^10=4*1024*1024*1024
=4K*K*K=4KM=4G
2进制表示,32根地址线可以是0000(32个0)-----1111(32个1),总共4G个不同的数。
这4G个数,就是0----4G-1。

这4G个不同的状态,我们称为4G个地址-----他们指向4G个不同的存储单元(具体如何指向的我想就不要深究了吧)

这算是对你第2个问题的回答么?

再看第一个问题。基本上正如你所说。但你要重视的一点是,16进制在汇编里是使用得最频繁的数制。原因很简单:16进制数和2进制数之间存在着最直观的换算关系(我郁闷关于这个问题我好象在CSDN谈过多次)。简单说就是,1位16进制数刚好对应4位2进制数。这样,1字节(8位)刚好对应2位16进制数。

1位16进制数能表达,区分多少种状态?或者说,给你一个空格,你随便写个16进制的数,总共有几种可能?-----我们可以写0---F。16种。(这个问题假如换成10进制的话就更直观了,1位的10进制数是0--9,10种)

4位16进制数能表达,区分多少种状态?0000-----1111,刚好也是16种。

按照2进制数的计算规则,我们可以口算进行2进制和16进制数的换算。0111 0001B对应的16进制数是71H。

书中提到cpu读取内存中的指令,我的问题是这个指令是内存中有的还是cpu给他的-----指令是内存中的。从哪个内存读指令呢?这要由CS:IP来指定。所以这里可以考察计算机启动:CPU被加电后,CS:IP将被初始化(硬件系统设计实现的)为比如0000:FFFF(具体数值不记得了,只是打个比方)。那么0000:FFFF就是CPU的第一条指令的地址,CPU将从内存单元0000:FFFF处读取数据(作为指令)到CPU中,然后进行译码,执行。00000:FFFF是计算机组装设计时安装的ROM,它的特点是每次加电后内容都是一样的而且不可被改写----这是它和RAM最大的不同。

比如ffff这个内存地址里面有一个数字3然后CPU读取里面的值-----这句话在汇编里会这样写:
MOV AL,[FFFF]---把内存FFFF处的内容送到AL,假设如你所说FFFF处被放置了3这个数,那么执行完这条指令,AL里就是3。

至于你后边半句,说得很迷糊人,我只能说,MOV AL,5这条指令将导致AL中的内容为5。这是立即数寻址(操作的数据直接在指令中)。而上边那条MOV AL,[FFFF]是寄存器寻址中的直接寻址(操作的数据在内存单元中)

还是好好跟着书走吧。实在不理解的概念可以先记下来,放一放,往下啃。回头再看或许已经不成为问题了。
通过性能监控工具nmon的学习,清楚的了解Linux服务器资源CPU、磁盘、内存、网络、进程之间的关联,了解nmon监控结果的字段的含义以及影响,更重要的是通过熟悉监控结果中字段数据的由来,理清性能测试的分析思路,学会性能测试的分析方法。 课程内容:第一章:课程简介课程介绍课程大纲第二章:nmon介绍nmon简介nmon下载nmon安装nmon屏幕统计-交互模式nmon数据统计-数据收集模式nmon进程关闭nmon分析工具nmon数据文件解析第三章:nmon数据分析SYS_SUMM【系统资源汇总】AAA【服务器基本信息】BBBP【Linux执行的命令和结果】CPU_ALL【所有CPU数据的概述】CPU_SUMM【每个CPU的整体占用情况】CPU001【CPU001的每个时间点占用情况】DISK_SUMM【磁盘的吞吐量和IOPS】DISKBSIZE【磁盘块信息】DISKBUSY【磁盘的繁忙情况】DISKREAD【磁盘的读取操作速率】DISKXFER【磁盘的I/0传输速率】JFSFILE【JFS文件空间使用百分比】MEM【内存】VM【虚拟内存】NET【网络数据传输速率】NETPACKET【网络数据包】PROC【进程】TOP【PID进程相关的CPU/内存等】 课程提供的下载资料:包含通过nmon收集的Linux服务器资源信息ecs-lc_220715_1019.nmon文件,大家在没有Linux服务器的情况下,可以通过对这个文件进行nmon数据解析和数据分析的学习。 

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧