关于汇编语言MOV指令的问题?

MOVAX,DS是什么意思?DS不是一个数据段吗,对这样赋值是什么意思?那MOVAH,DS呢?MOVDS,AX中把AX里面的数据赋到哪了?初学汇编,希望各位知道的帮忙解答... MOV AX,DS是什么意思?DS不是一个数据段吗,对这样赋值是什么意思?那MOV AH,DS呢?MOV DS,AX 中把AX里面的数据赋到哪了?初学汇编,希望各位知道的帮忙解答一下,谢了 展开
 我来答
liaozhiwmy
推荐于2017-11-25 · TA获得超过433个赞
知道小有建树答主
回答量:144
采纳率:100%
帮助的人:128万
展开全部
MOV AX,DS是把数据段的段地址取到AX中,后面应该有把AX再送其他段寄存器,这样,指向同一段地址。
MOV AH,DS,这是错误指令,AH是八位的,不能送十六位的数。
MOV DS,AX 把AX里面的数据赋到DS,前面应该有取段地址给AX,经过AX初始化DS。
zzlqh2008
2012-03-15
知道答主
回答量:14
采纳率:0%
帮助的人:8.6万
展开全部
MOV AX,DS 是把DS的值,也就是数据段的地址赋值给AX;
MOV AH,DS 是把DS的低8位(小端模式)赋值给AH,除非你是故意这样用,要不然就是Bug;
MOV DS,AX 是重新给数据段基址(DS)赋值,内容就是AX中的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小鹿酱L3
2012-03-15
知道答主
回答量:12
采纳率:100%
帮助的人:4.4万
展开全部
MOV AX,DS 和MOV DS,AX都是把源操作数(","后面的数)传递给目的操作数(","前面的数)MOV指令数据传送指令,相当于高级语言中的赋值运算符。MOV AH,DS是错误的,因为AH只有8位,而DS有16位,把一个占内存比较大是操作数的值传递给内存较小的,不能保证所传递的数值不发生改变,所以是这样写错误的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乐慕思2N
2012-03-15
知道答主
回答量:10
采纳率:0%
帮助的人:5.9万
展开全部
MOV AX,DX是把数据段段地址装进AX
MOV DS,AX是给段地址赋值(值是AX中的值)
MOV AH,DS是错的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
noodlest
2012-03-16 · TA获得超过785个赞
知道小有建树答主
回答量:724
采纳率:100%
帮助的人:719万
展开全部
1、我觉得不可以。
2、LEA是传操作数地址,mov是移动地址中的数据(当然,这个数据还可能为一个地址)
3、中括号表示间接寻址,对应寄存器中数据为二级地址,然后从二级地址中取出存储的数据。
4、期待其它答案。

其它参考信息:
0.LEA指令具有单时钟周期,执行效率很高。
1.它是CPU地址生成单元参与运算的,而不是ALU参与运算的,所以在流水线上不会与上下文的算术逻辑指令产生流水相关
2.INTEL指令集中不存在很多RISC机器所具有的三操作数算术运算指令,比如像ARM的"add r0,r1,r2",而LEA指令恰好提供了同样的功能,以模拟“三元算术逻辑指令”。
举个例子,要计算两个寄存器的和,但又不想破坏原来的值,那么可以执行lea ebx ,[eax+edx], 这条指令,执行的就是 ebx = eax + edx 这条加法运算。如果用add指令,则不可能一条指令内完成。
3.在汇编语言程序设计中,在需要取得一个变量地址时,使用LEA是很方便的。而MOV指令则常常出错,因为在微软MASM汇编语法中,label和variable是不同的。

lea eax,[esp+44]的功能就是eax=esp+44
这样的格式出现
是因为mov指令不支持mov reg,reg+immed这样的格式
当然也可以用lea来进行快速加法、乘法......
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式