汇编直接赋值问题

一小段汇编程序assumecs:codecodesegmentmovax,0ffffhmovds,axmovax,0020hmoves,axmovbx,0movcx,1... 一小段汇编程序
assume cs:code

code segment
mov ax,0ffffh
mov ds,ax

mov ax,0020h
mov es,ax

mov bx,0
mov cx,12

s:mov dl,[bx]
mov es:[bx],dl
inc bx
loop s

mov ax,4c00h
int 21h

code ends
end

中间的一段:mov dl,[bx]
mov es:[bx],dl
能不能改写为:mov es:[bx],[bx]
请解释一下原因!谢谢了!
展开
 我来答
百度网友6dd4fdf
推荐于2017-11-24 · TA获得超过1364个赞
知道小有建树答主
回答量:548
采纳率:0%
帮助的人:349万
展开全部
这样是不能滴!
错误在于类型不明确,当目的操作数(这里指es:[bx])和源操作数(这里是指[bx])都是寄存器间接寻址方式时,就没有一个标准来限制所赋的值的类型。
MOV指令的使用限制:1、源操作数与目的操作数可以是字节、字或双字,但必须有相同的类型;
2、源操作数与目的操作数不能同时为存储器操作数;
例如:假设变量X_BYTE用DB定义,变量Y_WORD用DW定义
正确:MOV X_BYTE, -5 ; 字节传送指令,-5(0FBH)送X_BYTE
MOV Y_WORD, -5 ;字传送指令,-5(0FFFBH)送Y_WORD
错误:MOV X_BYTE, 300 ; 目的操作数超出范围
MOV [BX], 30H ; 操作数类型不能确定
百度网友76f485bf9
2011-01-29 · TA获得超过709个赞
知道小有建树答主
回答量:446
采纳率:0%
帮助的人:224万
展开全部
CPU不支持这种源操作数和目的操作数都为变址寻址的方式。再说你这样写,传送的是字节还是字都确定不了。
每一种操作指令都应该被编译成对应的机器码,X86 系统没有为这种寻址方式编机器码,编译器根本没法编译
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6205bc1
2011-01-29 · TA获得超过6004个赞
知道大有可为答主
回答量:5933
采纳率:20%
帮助的人:2774万
展开全部
不能够地址传送给地址,就是不能值传值,原因不清楚。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式