鱼C论坛

 找回密码
 立即注册
查看: 4438|回复: 15

关于MOV指令的一些疑问

[复制链接]
发表于 2011-6-2 19:39:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zhouyg1992 于 2011-6-18 20:50 编辑

假如我在数据段这么定义了一个变量X         DB    1,2,3
    然后如果我想把数1传送给AL那么下面这些指令哪个才是正确的MOV   AL,X还是MOV   AL,[X]?这俩指令又有何区别?还有MOV AX,OFFSET X这个指令跟上面两个又有何区别?真混的慌。谁告诉我呀!新手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-2 21:22:13 | 显示全部楼层
MOV   AL,X是正确的
第二种写法不被允许,可以联想一下bx与[bx]区别
MOV AX,OFFSET X是把偏移地址送到AX中,结果为0,因为它指向的就是x的起点处,没有偏移量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-2 21:38:31 | 显示全部楼层
再说明白点呗 还是不能理解。我看书上有这种形式的:MOV [SI],AX 那怎么第二条就不对呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-2 21:58:59 | 显示全部楼层
你再看下头两集的视频呗,si明显是通用寄存器啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-2 22:05:19 | 显示全部楼层
这个我知道 我只是高不清楚这几个指令到底是怎么回事?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-2 22:06:36 | 显示全部楼层
MOV AX,[100]
MOV AX,[X]
那这两个指令本质上有啥区别?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-2 22:12:08 | 显示全部楼层
其实mov al,[x]不是不可以用
你要弄清楚,为啥mov al,[bx]可以用,而它不能用
因为bx,si有它默认的段,所以用[bx]时,CPU知道要从哪个段的偏移地址来读取
自己定义的变量就不同了,用的时候需要加上段地址mov al,ds:[x]
这么说明白了么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-2 22:15:26 | 显示全部楼层

如果X的值是100的话,那就没啥区别
只不过一个是常量,一个是变量
只是写指令的时候,注意格式,加上段地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-3 12:08:13 | 显示全部楼层
那如果我想把1 或者 2  或者 3 传送给ax怎么做?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-4 13:13:58 | 显示全部楼层
刚看完前3章,我觉得[100]  这个貌似是传递内存单元要用的 一定还要和DS配套用才可以吧  [x] 貌似是个变量,可能是错误的,如果有个具体的值在配合DS应该是正确的   嘿嘿,个人浅显的看法

传值的话   mov ax,1 不就可以了吗   

要么 你就把1的值先放进地址中 在mov  ax,[2]  2是偏移地址  当然自己要知道DS的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-5 12:00:05 | 显示全部楼层
        MOV        AL,X                   ;标记1    执行后的结果为:(AL)=1Bh(也就是十进制的27)
        MOV        BL,[X]                 ;标记2    执行后的结果为:(BL)=00
        MOV        CX,OFFSET X       ;标记3    执行后的结果为: (cx)=0000
上面是debug后的结果。可是  总感觉哪里有些不对劲啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-5 12:01:01 | 显示全部楼层
哦 错了 原程序是这样的。
.MODEL        SMALL
.DATA
        X        DB        27,57,45
.STACK
.CODE
.STARTUP
        MOV        AL,X
        MOV        BL,[X]
        MOV        CX,OFFSET X
.EXIT 0
END
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-5 12:02:25 | 显示全部楼层
        MOV        AL,X                   ;标记1    执行后的结果为:(AL)=1Bh(也就是十进制的27)
        MOV        BL,[X]                 ;标记2    执行后的结果为:(BL)=00
        MOV        CX,OFFSET X       ;标记3    执行后的结果为: (cx)=0000
上面是debug后的结果。可是  总感觉哪里有些不对劲啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-5 12:10:57 | 显示全部楼层
注意标记2 并不是其我们期望的结果。这是怎么回事呢?还有标记2跟标记3又有何区别呢,结果都一样啊、?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-5 17:04:47 | 显示全部楼层
mov ax,[x]与mov ax,[bx]本质上有何区别呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-13 15:42:39 | 显示全部楼层
看完前5章了,我谈谈自己的看法  Mov ax,[bx]与mov ax,[x]区别    [bx]这个应该是系统会自动默认把bx作为偏移地址,而[x] 估计需要你在前面加个段地址,比如mov ax,es[x],如果不加段地址,系统可能就无法找到真正的物理地址,至于为什么‘[bx]这个应该是系统会自动默认把bx作为偏移地址’ 我也不知道,你可以看书本121页 程序5.9  这里面可能会有你要的答案(汇编代码这里写了2个关于段地址的指令)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 01:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表