mack1983 发表于 2013-12-9 05:27:57

赋值问题

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

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

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

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

~逆天~ 发表于 2013-12-10 14:09:27

1.寄存器与寄存器之间的赋值必须是同位赋值.寄存器与内存可以不一定要按同位
赋值的要求
你的结论没问题,理解有偏颇。这是寄存器赋值长度问题,要看是寄存器位数决定,记住这点就行了。
2.bl不能等同于bx来进代表偏移地址进行赋值.
能代表偏移地址的至少有BX,BP,SI,DI,前两个不能同时使用,后两个不能同时使用
3、说了一大推,就是mov al,ds:这条指令转换成机器指令占几个字符呗,其实这条指令前一个字符是操作符就是MOV的意思,后一个字符就是AL,AL只能存一个字符。你千万不能把这条指令理解成字符串啊,这是指令有它的规则!
页: [1]
查看完整版本: 赋值问题