汇编直接赋值问题
一小段汇编程序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]
请解释一下原因!谢谢了! 展开
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]
请解释一下原因!谢谢了! 展开
3个回答
展开全部
这样是不能滴!
错误在于类型不明确,当目的操作数(这里指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 ; 操作数类型不能确定
错误在于类型不明确,当目的操作数(这里指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 ; 操作数类型不能确定
展开全部
CPU不支持这种源操作数和目的操作数都为变址寻址的方式。再说你这样写,传送的是字节还是字都确定不了。
每一种操作指令都应该被编译成对应的机器码,X86 系统没有为这种寻址方式编机器码,编译器根本没法编译
每一种操作指令都应该被编译成对应的机器码,X86 系统没有为这种寻址方式编机器码,编译器根本没法编译
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不能够地址传送给地址,就是不能值传值,原因不清楚。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询