鱼C论坛

 找回密码
 立即注册
查看: 1382|回复: 1

赋值问题

[复制链接]
发表于 2013-12-9 05:27:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 mack1983 于 2013-12-9 23:23 编辑

mov al,[bx] 编译不报错(取偏移地址bx的低位赋值给al)
mov [bx],al 编译不报错(取ax寄存器低位的值赋值给偏移
            址为bx的内存单元)
mov al,bl   编译不报错(寄存器bx低位赋值给ax寄存器低位  
mov al,[bl] 编译报错  (用意:最bx编移地址的数值的低位赋值给ax寄存的低位
                       错误原因:bl不能代表bx做为偏移地址)
mov al,bx   编译报错  (用意:取bx寄存器的低位赋值给ax的低位
                       错误原因:bx和al不同位数)

上面的例子,是不是可以得出这样的结论:
1.寄存器与寄存器之间的赋值必须是同位赋值.寄存器与内存可以不一定要按同位
  赋值的要求
2.bl不能等同于bx来进代表偏移地址进行赋值.

再问一个弱智一点的问题:
mov al,[bx]
这条指令跟据前面小甲说的,mov al,ds:[bx],不是用数值赋值的,这指令占用2个节字
但我理解不了,一个m换成ascII码,就是4DH,就一个m都占用一个字节了,一个
mov写入内存都占用了6个字节了,怎么2个字节,就存得下mov al,[bx]了?
后来我又想想,实际上是不是把mov al编译成一个16进制的数存在一个内存单元,然
后把ds:[bx]编译成一个16进制的数值,然后合起来就是两个16进制的数值,由此得出
mov al,ds:[bx]战用两个字节?
又或者是直接把mov al,ds:[bx]编译成一个两位的16进制数值来代表mov al,ds:[bx]?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-10 14:09:27 | 显示全部楼层

回帖奖励 +5 鱼币

1.寄存器与寄存器之间的赋值必须是同位赋值.寄存器与内存可以不一定要按同位
  赋值的要求
你的结论没问题,理解有偏颇。这是寄存器赋值长度问题,要看是寄存器位数决定,记住这点就行了。
2.bl不能等同于bx来进代表偏移地址进行赋值.
能代表偏移地址的至少有BX,BP,SI,DI,前两个不能同时使用,后两个不能同时使用
3、说了一大推,就是mov al,ds:[bx]这条指令转换成机器指令占几个字符呗,其实这条指令前一个字符是操作符就是MOV的意思,后一个字符就是AL,AL只能存一个字符。你千万不能把这条指令理解成字符串啊,这是指令有它的规则!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-28 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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