这条指令为什么是错误?

QQKKKQQ 2010-10-29 01:38:57
.MODEL TINY
.386

.DATA
x dw 1012h

.CODE
.STARTUP

mov word ptr ds:[bx],x ;这条指令为什么是错误?

.EXIT
END
...全文
177 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
yy1990cn 2010-12-04
  • 打赏
  • 举报
回复
LZ确实应该好好看书,寻址方式中应该有说明,主要是弄清楚,CPU如何执行指令,就拿mov word ptr ds:[bx],5152h 这条指令来说,它编译后就有一条对应的机器指令,而5152h就包含在这个机器指令中,CPU执行的时候先要取指令,也就是取这条机器指令,然后根据机器指令去取数据,而在这条指令中就只需要取ds:[bx]内存中的数据,不需要取5152H这个数,因为在CPU取机器指令的时候已经取出来了,所以上面各位说的不能内存到内存,实际就是说CPU取数据的时候不能内存到内存,有兴趣的话你可以看看汇编与机器指令的转换,应该对你有帮助
kouji1990 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 shzhfu 的回复:]
楼主可以这样来区分几种操作数类型:

CPU有执行指令的"单元"(主要取出并执行下1条指令)和少量的数据存储单元(寄存器), 其他指令和多数数据存放在存储器(即内存, 外存中的数据要先装入内存才能使用).

CPU执行指令时, 指令中直接包含着的(无须到其他任何地方去取的)操作数, 就是立即数;

需要到其他任何地方去取, 但不"离开"CPU就能取到的, 就是寄存器操作数.

需……
[/Quote]讲得够浅显
wjb_yd 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qqkkkqq 的回复:]
引用 9 楼 applic 的回复:

引用 7 楼 qqkkkqq 的回复:
引用 1 楼 applic 的回复:

内存不能直接送到内存


按照你的理解,mov word ptr ds:[bx],5152h,应该是内存到内存,是错的?

不过它是对的?

5152h是立即数


立即数不也是存放在存储器中么?
[/Quote]

这个直接写在opcode里了
shzhfu 2010-11-01
  • 打赏
  • 举报
回复
楼主可以这样来区分几种操作数类型:

CPU有执行指令的"单元"(主要取出并执行下1条指令)和少量的数据存储单元(寄存器), 其他指令和多数数据存放在存储器(即内存, 外存中的数据要先装入内存才能使用).

CPU执行指令时, 指令中直接包含着的(无须到其他任何地方去取的)操作数, 就是立即数;

需要到其他任何地方去取, 但不"离开"CPU就能取到的, 就是寄存器操作数.

需要"离开"CPU到存储器中取的, 就是存储器操作数. 它的地址可以以各种方式提供(直接寻址,寄存器间接, 寄存器相对,基址加变址, 基址加变址相对).
QQKKKQQ 2010-10-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 applic 的回复:]

汇编语言中操作数有三种:寄存器操作数、存储器操作数和立即数
其中立即数相当于高级语言中的常量(常数),它是直接出现在指令中的数,不用存储在寄存器或存储器中。立即数是直接以数值形式存在于指令编码中或该立即数指令的后面,通常是放在代码段中,看内存中的数据段,根本没有这个常量
[/Quote]

谢过牛牛详细解释!
znxllyuan 2010-10-30
  • 打赏
  • 举报
回复
汇编语言中操作数有三种:寄存器操作数、存储器操作数和立即数
其中立即数相当于高级语言中的常量(常数),它是直接出现在指令中的数,不用存储在寄存器或存储器中。立即数是直接以数值形式存在于指令编码中或该立即数指令的后面,通常是放在代码段中,看内存中的数据段,根本没有这个常量
QQKKKQQ 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 applic 的回复:]

汇编语言中操作数有三种:寄存器操作数、存储器操作数和立即数
其中立即数相当于高级语言中的常量(常数),它是直接出现在指令中的数,不用存储在寄存器或存储器中。立即数是直接以数值形式存在于指令编码中或该立即数指令的后面,通常是放在代码段中,看内存中的数据段,根本没有这个常量
[/Quote]

无论数据在数据段或是在代码段,其实它都是在存储器!
如上面有位楼主所说,指令如果是:内存到内存,不可以。
那么这条指令:mov word ptr ds:[bx],5152h,应该是内存到内存了?
Applic 2010-10-29
  • 打赏
  • 举报
回复
汇编语言中操作数有三种:寄存器操作数、存储器操作数和立即数
其中立即数相当于高级语言中的常量(常数),它是直接出现在指令中的数,不用存储在寄存器或存储器中。立即数是直接以数值形式存在于指令编码中或该立即数指令的后面,通常是放在代码段中,看内存中的数据段,根本没有这个常量
QQKKKQQ 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lizi5803 的回复:]

还是先看书吧!
[/Quote]


只求个所以然,懂就说说么!
QQKKKQQ 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 applic 的回复:]

引用 7 楼 qqkkkqq 的回复:
引用 1 楼 applic 的回复:

内存不能直接送到内存


按照你的理解,mov word ptr ds:[bx],5152h,应该是内存到内存,是错的?

不过它是对的?

5152h是立即数
[/Quote]

立即数不也是存放在存储器中么?
难得糊涂ha 2010-10-29
  • 打赏
  • 举报
回复
还是先看书吧!
Applic 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qqkkkqq 的回复:]
引用 1 楼 applic 的回复:

内存不能直接送到内存


按照你的理解,mov word ptr ds:[bx],5152h,应该是内存到内存,是错的?

不过它是对的?
[/Quote]
5152h是立即数
QQKKKQQ 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 paullbm 的回复:]

建议楼主再熟悉一下MOV指令的相关规则。
[/Quote]


给个链接?
QQKKKQQ 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 applic 的回复:]

内存不能直接送到内存
[/Quote]

按照你的理解,mov word ptr ds:[bx],5152h,应该是内存到内存,是错的?

不过它是对的?
paullbm 2010-10-29
  • 打赏
  • 举报
回复
建议楼主再熟悉一下MOV指令的相关规则。
masmaster 2010-10-29
  • 打赏
  • 举报
回复

MOV MemOfs,Acc 1010001w 8086 Move Data
Acc,MemOfs 1010000w 8086 Move Data
Reg,Imm 1011wrrr 8086 Move Data
Mem,Imm 1100011woo000mmm 8086 Move Data
Reg,Reg 1000101woorrrmmm 8086 Move Data
Reg,Mem 1000101woorrrmmm 8086 Move Data
Mem,Reg 1000100woorrrmmm 8086 Move Data
Reg16,Seg 10001100oosssmmm 8086 Move Data
Seg,Reg16 10001110oosssmmm 8086 Move Data
Mem16,Seg 10001100oosssmmm 8086 Move Data
Seg,Mem16 10001110oosssmmm 8086 Move Data
Reg32,CRn 000011110010000011sssrrr 80386 Move Data
CRn,Reg32 000011110010001011sssrrr 80386 Move Data
Reg32,DRn 000011110010000111sssrrr 80386 Move Data
DRn,Reg32 000011110010001111sssrrr 80386 Move Data
Reg32,TRn 000011110010010011sssrrr 80386 Move Data
TRn,Reg32 000011110010011011sssrrr 80386 Move Data
QQKKKQQ 2010-10-29
  • 打赏
  • 举报
回复
mov word ptr ds:[bx],5152h

为什么这条指令对?
难得糊涂ha 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qqkkkqq 的回复:]
mov word ptr ds:[bx],ax
为什么对?
[/Quote]
因为这句是寄存器到内存
QQKKKQQ 2010-10-29
  • 打赏
  • 举报
回复
mov word ptr ds:[bx],ax
为什么对?
Applic 2010-10-29
  • 打赏
  • 举报
回复
内存不能直接送到内存

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧