关于8086汇编的寻址方式一题:MOV [1200],23H 请指出该指令的正误

R.T.
MOV [1200],23H
我看这条指令有一些问题。首先,[1200]能表示内存地址么?常用的表示方式不是十六进制数,[1200H]这种?第二个,同学告诉我说不能直接对内存地址赋值,需要一个通用寄存器AL,是这样吗?

帮你调试过了,[xxxxh ]里如果是数的话不能表示地址的。要显式地给出段地址,如ds:[xxxxh ]才行,否则编译时会被处理成一个立即数xxxxh。[ ]里是什么进制这个无所谓的比如写10和写0aH效果一样,都可以。你同学是对的。因为不知道这个内存地址有多长。或者像上楼所说。用mov byte ptr ds:[xxxxh], 23h这样,或mov word ptr ds:[xxxxh], 23h。注意一定要写上ds,否则会报错的,我试过了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-13
[1200]是可以这么写的,你也说了常用的是16进制,因为16进制和2进制容易转换,但是用十进制也可以啊。
后面直接写数的话,不能确定数的类型,即不知道是字节还是字的操作。可以这么写:
MOV BYTE PTR [1200],23H
说明是字节操作。追问

呃,,,直接这么写也算是对的咯?

追答

就是逗号两边的数据类型得一样。可以直接写数字的。

第2个回答  2019-03-14
首先这个指令时错误的,错在没有指明数据类型可以改为
MOV BYTE PTR[1200],23H
第3个回答  2011-11-19
可以的,这个【1200】在这里作为偏移地址,再加上它的段基址DS * 16,就是物理地址了。可以直接赋值。
第4个回答  2011-11-13
这样应该可以的 你用编译器编译下看看就知道了
相似回答