小小鱼苗 发表于 2012-2-11 00:06:46

求教关于MOV的问题

MOV AL,
MOV AX,1000
以上两个命令可以操作
为什么下面的不行
MOV AL,1000

风剑河 发表于 2012-2-11 08:20:44

我试验了一下,得出以下结论:
1. MOV AX,1000不是将1000:0这个内存单元的值赋给ax,而赋的是ds:1000这个内存单元的值;
2. 对于 1000这种写法,我不清楚CPU的全部的判断方法,但1000这个数据必须和所要赋值的寄存器的大小符合,即ax可存一个字型数据,那么1000中的这个1000就可以是0~ffff中的任何数据;而al只可存放一个字节的数据,那么1000中的这个1000就只能是0~ff之间的数据,超出这个范围就会报错;
3. 暂时没有看出这种赋值方式有什么好处,觉得是画蛇添足,求高手指点!!!

小小鱼苗 发表于 2012-2-11 15:55:50

本帖最后由 小小鱼苗 于 2012-2-11 16:28 编辑

谢谢解答,但是我还有个疑问.
1.我用的是系统自带的DEBUG 命令    只输入代码 这个DEBUG会在执行之前检测内存地址与寄存器符合不?
2.(此问题2楼已解决,总结原因:我把课本学死了,学的是8位的系统.以为都是以字节来存放的,所以进入误区,而我现在的机器是32位的)
3.求这个方法的用途.我想既然他存在,一定有必要性.

小军 发表于 2012-2-11 16:01:39

你用mov ax,1000就没问题咯要不再加个 MOV AH,0

小小鱼苗 发表于 2012-2-11 16:29:28

谢谢小军解答,我已经懂了.
第1.3问题有人来帮忙吗

Seely 发表于 2012-2-11 20:35:23

你要硬想这么干也行,指明长度就可以了。MOV AL,byte ptr ds:1000
页: [1]
查看完整版本: 求教关于MOV的问题