|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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]?
|
|