能力值:
( LV2,RANK:10 )
|
-
-
2 楼
[QUOTE=wulfalone;923849]最近看王爽的汇编语言,发现里面很多讲得不清不楚的,内存是都有地址编号吗?这个编号是怎么实现的?地址长度是多少?一个内存单元的长度究竟是多少啊?
mov ax,[0]
mov al,[0]
这两个指令书上说第一个是把DS:0开头的内容放入AX中,长度是一个字,这意思是不是就是把两个连续的内存单元...[/QUOTE]
我看不是没讲清楚,而是你基础不好吧 。想学汇编,最好能懂门高级语言,尤其是C语言。
内存没有地址你怎么访问啊?实现方式你去计算机组成原理吧。地址长度是由CPU决定的,比如32位,有4G的寻址空间,当然,内存不一定这么大。
mov ax,[0]。你就不想想ax是几个字节,[0]中的0本身是个地址,[0]是取地址0开始的值,至于取几个字节,得看ax了,ax是两字节的,所以mov ax,[0],会取2个字节的值到AX,要是取了4个字节,怎么放啊?
mov al,[0],就更不用说了,取一个字节。
mov eax,[0],这个就取4个字节。
|
能力值:
( LV6,RANK:90 )
|
-
-
3 楼
楼上正解。
其实不是王爽老师的书讲的不清楚,而是因为讲清楚了更加难以看明白。汇编语言更接近硬件,很多东西是要从其他的课程的学习中自己领会,再融汇贯通的……
内存的寻址有一些是通过硬件实现的,而不是说手动去设定什么。内存的编号也不是1、2、3、4之类的编号,而是各个线路的选通和截止来实现取某个字节或者某几个字节。
本来课本屏蔽了这些细节,方便让你掌握汇编。如果你真想知道,就像楼上说的,去看计算机组成原理便是。我们的教材是清华的,里面有很多细节容易忽略,也有几处前后矛盾的错误,建议你下载视频教程,自己看书确实会漏掉很多东西,外加书上的各种电路图也比较纠结。
而且,看这本书的电路图还需要些电路方面的基础知识,图符,电容的结构之类的,还是挺简单的……
祝楼主好运^_^)Y
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
[QUOTE=wulfalone;923849]最近看王爽的汇编语言,发现里面很多讲得不清不楚的,内存是都有地址编号吗?这个编号是怎么实现的?地址长度是多少?一个内存单元的长度究竟是多少啊?
mov ax,[0]
mov al,[0]
这两个指令书上说第一个是把DS:0开头的内容放入AX中,长度是一个字,这意思是不是就是把两个连续的内存单元...[/QUOTE]
内存是都有地址编号吗?
是的,都有编号,即内存地址。
这个编号是怎么实现的?
这个要去看《计算机组成原理》。
地址长度是多少?
你问的这个问题本身就有问题,现在的计算机都是16/32/64位的,地址长度是就可以是2/4/8字节。
一个内存单元的长度究竟是多少啊?
标准的基础问题,一个内存单元的可见长度是8bits,即一个字节。
mov ax,[0]
mov al,[0]
al,ax,eax实际上是同一个寄存器,eax是全长度32位,ax是指eax的低16位,al是指eax的低8位,汇编编译器会自动分析mov后面是ax还是al,从而决定从内存中取出几个字节。如果是al,就从0开始取出1个字节(内存单元0),如果是ax,就从0开始取出2个字节(内存单元0和1),如果是eax,就从0开始取出4个字节(内存单元0,1,2,3)。
这意思是不是就是把两个连续的内存单元...
这也是一个基础问题,可以参照《计算机体系结构》。现代计算机普遍是32位,所以一次存取必然是从偶数内存地址读取连续的32位(即连续的4个字节)比如说从地址0开始,一次将单元0,1,2,3全部读出,即使你只想要单元2,3组成的2字节,计算机还是会从单元0,1,2,3全部读出,再屏蔽掉单元0,1数据。
1楼说得很对,汇编涉及到很多底层知识,不像是高级语言一学就会,所以要学很多基础课程才能真正的理解和用好汇编语言。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
楼主去学习一下《计算机组成原理》吧
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
很久以前学过。 忘得差不多了。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
楼上所有都为正解
看来还有基础比我还差的人混看雪啊,找到自信了,哈哈
|
能力值:
( LV12,RANK:1000 )
|
-
-
8 楼
楼主成才的难度很大,你的老师肯定很辛苦。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
[QUOTE=wulfalone;923849]最近看王爽的汇编语言,发现里面很多讲得不清不楚的,内存是都有地址编号吗?这个编号是怎么实现的?地址长度是多少?一个内存单元的长度究竟是多少啊?
mov ax,[0]
mov al,[0]
这两个指令书上说第一个是把DS:0开头的内容放入AX中,长度是一个字,这意思是不是就是把两个连续的内存单元...[/QUOTE]
1. 每个内存都有特定的地址编号,cpu的 cs ip 能映射到对应的内存地址。
2. 每个内存单元的的长度都是一个字节,就是8个二进制数,地址长度是由20个二进制数组成的(5个16进制数)。
每一个地址对应一个内存单元:比如 10000H表示一个字节的内存单元,10001H表示另一个内存单元节
3.ax是十六位的就是16个二进制数两个字节。 所以需要两个连续的内存单元也是两个字节。
我是新手,说错了不要喷我。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
楼上说的很对呀
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
这个说的很对。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
现在是DDR3 用不了几个月就是DDR4了
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
楼主用现在明白了吗
我也没看组成原理 这些很基础的 多看看就知道了
|
|
|