1123566890 发表于 2013-8-6 09:33:33

027第五章 [BX]和loop指令05

为什么 ffff:0 是8位的   而ds:0是十六位的呢 我知道 ds是16位寄存器 而 ffff:0 为什么是八位的呢

Crazy迷恋. 发表于 2013-8-6 11:07:48

这只是一个段加偏移的一个寻址物理地址的一个过程。跟多少位无关。主要是看你怎么用,你用了一个字节还是一个字。如果楼主还有什么疑问最好选择一段代码帖出来。这样会好一点。

怡静 发表于 2013-8-6 12:26:28

我现在想知道的是,它问的这个多少位,他是从那里看出来的,本因全是十六位呀,如果是通用寄存器,可分高八位,低八位呀。

Crazy迷恋. 发表于 2013-8-6 12:34:50

怡静 发表于 2013-8-6 12:26 http://bbs.fishc.com/static/image/common/back.gif
我现在想知道的是,它问的这个多少位,他是从那里看出来的,本因全是十六位呀,如果是通用寄存器,可分高八 ...

所以说 这个要看 你怎么用了。比如mov进一个ax那肯定是16位的数据进al 或者ah是一个字节

怡静 发表于 2013-8-6 12:41:34

Crazy迷恋. 发表于 2013-8-6 12:34 static/image/common/back.gif
所以说 这个要看 你怎么用了。比如mov进一个ax那肯定是16位的数据进al 或者ah是一个字节

是呀,在用时可以用汇编指令表达出来呀。

Crazy迷恋. 发表于 2013-8-6 12:44:41

怡静 发表于 2013-8-6 12:41 static/image/common/back.gif
是呀,在用时可以用汇编指令表达出来呀。

所以叫他帖代码~~~话说怡静。在学易?

怡静 发表于 2013-8-6 12:48:37

Crazy迷恋. 发表于 2013-8-6 12:44 static/image/common/back.gif
所以叫他帖代码~~~话说怡静。在学易?

学过一点易,只会弄简单的程序,现在在学OD,到时再把易学下,没时间学,唉!

怡静 发表于 2013-8-6 12:51:20

Crazy迷恋. 发表于 2013-8-6 12:44 static/image/common/back.gif
所以叫他帖代码~~~话说怡静。在学易?

上次学改一个灰色的按纽,就是先设一个灰色的用易写好,然后再设一个不是灰色的用易写好,然后把两个程序放到OD上对比看它们的不同,然后再想怎么改,反正只要花时间就能弄出来,学这个,一是要有时间,二是要有耐心。

Crazy迷恋. 发表于 2013-8-6 13:28:23

怡静 发表于 2013-8-6 12:51 static/image/common/back.gif
上次学改一个灰色的按纽,就是先设一个灰色的用易写好,然后再设一个不是灰色的用易写好,然后把两个程序 ...

{:5_93:}慢慢来别急 ~~~急不来。

怡静 发表于 2013-8-6 13:31:16

Crazy迷恋. 发表于 2013-8-6 13:28 static/image/common/back.gif
慢慢来别急 ~~~急不来。

我从没急过,我是一天学一点,有时一天什么也没学,我学东东就是好玩,

Dardy 发表于 2013-8-6 14:20:36

数据存放在内存中,要访问这个数据就要知道这个数所在的内存地址。每个内存单元编有一个地址,每个内存单元是8位。
一个数据较小,存放在内存中只占据一个内存单元,而一个较大的数据则可能占据多个连续的内存单元。
访问一个数据,用到的这个数据址,是这个数据所占据的一个或多个内存单元的起始地址。
mov ax,0ffffh
mov ds,ax
mov al,ds:;把以FFFF:0为起始地址的连续一个或多个内存单元的值传送到al,al只有8位,所以al装下的是FFFF:0这个内存单元的值。
mov ax,ds: ;AX有16位,所以AX装下了FFFF:0和FFFF:1,其中AL装下FFFF:0中的值,AH装下了FFFF:1

立即数没有长度(8位或16)这个属性,但通过换算成2进制形式可知它至少要多少个内存单元才能存放得下。代码中给出的一个内存地址也没有其对应的数据的长度这个属性,它作为一个起始地址使用,长度不确定。

mov al,1 ; al的值为0000 0001 (2进制)
mov ax,1 ;ax的值为 0000 0000 0000 0001 (高字节填充0)
mov al, 1 0000 0000b ;出错,放不下。

mov ds:,1   ;FFFF:0 中存放 0000 0001 ?错,两者都没有长度属性,不知道怎么存放。
mov btye prt ds:,1 ;对头,btye prt ds: 指明只使用以ds:为起始的一个字节。FFFF:0 中存放 0000 0001
mov word prt ds:,1 ;指明只使用以ds:为起始的两个字节。FFFF:0 和FFFF:1分别存放0000 0001和0000 0000




Dardy 发表于 2013-8-6 14:20:42

数据存放在内存中,要访问这个数据就要知道这个数所在的内存地址。每个内存单元编有一个地址,每个内存单元是8位。
一个数据较小,存放在内存中只占据一个内存单元,而一个较大的数据则可能占据多个连续的内存单元。
访问一个数据,用到的这个数据址,是这个数据所占据的一个或多个内存单元的起始地址。
mov ax,0ffffh
mov ds,ax
mov al,ds:;把以FFFF:0为起始地址的连续一个或多个内存单元的值传送到al,al只有8位,所以al装下的是FFFF:0这个内存单元的值。
mov ax,ds: ;AX有16位,所以AX装下了FFFF:0和FFFF:1,其中AL装下FFFF:0中的值,AH装下了FFFF:1

立即数没有长度(8位或16)这个属性,但通过换算成2进制形式可知它至少要多少个内存单元才能存放得下。代码中给出的一个内存地址也没有其对应的数据的长度这个属性,它作为一个起始地址使用,长度不确定。

mov al,1 ; al的值为0000 0001 (2进制)
mov ax,1 ;ax的值为 0000 0000 0000 0001 (高字节填充0)
mov al, 1 0000 0000b ;出错,放不下。

mov ds:,1   ;FFFF:0 中存放 0000 0001 ?错,两者都没有长度属性,不知道怎么存放。
mov btye prt ds:,1 ;对头,btye prt ds: 指明只使用以ds:为起始的一个字节。FFFF:0 中存放 0000 0001
mov word prt ds:,1 ;指明只使用以ds:为起始的两个字节。FFFF:0 和FFFF:1分别存放0000 0001和0000 0000




页: [1]
查看完整版本: 027第五章 [BX]和loop指令05