社区
汇编语言
帖子详情
指令是怎样取到它的偏移地址?
RRUURR
2010-12-19 01:56:41
计算机内部的工作原理怎样?
由指令的二进制机器码可以判断出来么?
...全文
516
10
打赏
收藏
指令是怎样取到它的偏移地址?
计算机内部的工作原理怎样? 由指令的二进制机器码可以判断出来么?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shzhfu
2010-12-20
打赏
举报
回复
[Quote=引用 7 楼 rruurr 的回复:]
指令的数据寻址与存储器寻址有什么区别?
存储器寻址是否由段地址,偏移地址确定?
数据寻址是否也一样?
[/Quote]
数据寻址应该是操作数寻址的统称,它包括存储器寻址、寄存器寻址和立即数寻址。
存储器寻址是由段地址和偏移地址确定,但偏移地址可以直接给出,也可以通过BX等寄存器给出。数据寻址中的另外两种寻址都是在指令中直接带着的,无需按地址去找。比如"add ax,1",指令中直接带有立即数1,所以CPU就知道要把1拿来做加法,而"add ax,bx"中的源操作数也是寄存器,CPU就知道要把它自身内部的2个寄存器AX和BX中的值拿来相加。"add ax,[0]"就不同了,CPU自己完不成这个操作,必须借助地址总线和数据总线,把内存中某个单元的内容拿过来,才能完成加法运算。
至于CPU从指令中如何知道是存储单元的寻址还是立即数或寄存器的寻址,那确实是“指令编码”中的问题了。因为计算机内部要把一切内容(包括指令和数据)都变成二进制数,所以,设计师在“指令编码”中是下了很大功夫的。具体编码我没仔细研究,就举个简单的例子帮你理解吧(假设我们规定目标操作数必须是AX)。
比如我们规定最高3位是运算方法:000是加法,001是减法;再后面2位表示寻址方式:00是立即数,01是寄存器,10是存储器;若是立即数,后面的十六位就是这个数,若是寄存器,后面的4位是寄存器的编号(假设0000-ax,0001-bx,0010-cx,...),若是存储器,则后面16位是偏移地址。
于是
000 00 0000 0000 0000 0001 你就知道是ADD ax,1
001 01 0010 那就是SUB ax,cx
000 10 0000 0000 1111 1111 就是 ADD ax,[00FFH]
(注意这些不是真实的机器指令编码!)
RRUURR
2010-12-20
打赏
举报
回复
[Quote=引用 8 楼 masmaster 的回复:]
楼主可以找些intel指令编码方面的资料研究一下。
[/Quote]
到论坛问,当然是求个结果啦!
masmaster
2010-12-20
打赏
举报
回复
楼主可以找些intel指令编码方面的资料研究一下。
RRUURR
2010-12-20
打赏
举报
回复
指令的数据寻址与存储器寻址有什么区别?
存储器寻址是否由段地址,偏移地址确定?
数据寻址是否也一样?
chzhn
2010-12-20
打赏
举报
回复
例如:
mov edi,[ecx+C]
RRUURR
2010-12-20
打赏
举报
回复
指令:
mov ax,1020h
机器码:
B82010
这条指令是怎样寻址?
masmaster
2010-12-19
打赏
举报
回复
同意1楼观点
zybzyb1987
2010-12-19
打赏
举报
回复
这完全是编译器的工作。每当编译到一新段,编译器自动添加一个计数器,初始值为0。然后根据段内代码和数据的长度,计数器逐步增加。每遇到一个变量,地址计数器都设置一个端点,以方便变量偏移地址的取用。
znxllyuan
2010-12-19
打赏
举报
回复
这个是编译器的事吧
abgood
2010-12-19
打赏
举报
回复
计算机内部的工作都是基于CPU的,CPU执行的是二进制代码
计组(day2)8086
指令
系统——输入输出
指令
、取
偏移地址
指令
、其他传送
指令
知识点输入输出
指令
什么是输入输出
指令
?输入输出
指令
格式及功能输入输出
指令
的实例输入输出
指令
的两种寻址方式及注意事项取
偏移地址
指令
什么是取
偏移地址
指令
?
指令
格式取
偏移地址
指令
的实例其他传送类
指令
输入输出
指令
什么是输入输出
指令
? 输入
指令
:输入
指令
IN用于从I/O端口读数据到累加器AL(或AX)中 输出
指令
:输出
指令
OUT用于把累加器AL(或AX)的内容写到I/O端口 注意 输入输出
指令
中,只有...
汇编
指令
lea取
偏移地址
LEA是微机8086/8088系列的一条
指令
,取自英语Load effect address——取有效地址,也就是取
偏移地址
。在微机8086/8088中有20位物理地址,由16位段基址向左偏移4位再与
偏移地址
之和得到。 取
偏移地址
指令
指令
格式如下: LEA reg16,mem LEA
指令
将存储器操作数mem的4位16进制
偏移地址
送到指定的寄存器。这里,源操作数必须是存储器操作数,目标操...
取
偏移地址
指令
总结(不完整版)0
LEA取有效地址
指令
(load effective address )
指令
格式:LEA 目的,源
指令
功能:取源操作数地址的偏移量,并把它送到目的操作数所在单元。 LEA
指令
要求源操作数必须是存储单元,而且目的操作数必须是一个除段寄存器之外的16位寄存器。使用时要注意它与MOV
指令
的区别,MOV
指令
传送的一般是源操作数中的内容而不是地址。 例: 假设:SI=1000H, DS=50
汇编语言lea
指令
取数组
偏移地址
x86汇编语言,lea
指令
用于把源操作数的地址偏移量传送目的操作数。
寄存器
偏移地址
介绍
总的来说,寄存器
偏移地址
是用于访问内存映射设备或寄存器映射设备中特定寄存器的地址偏移量,通过与基地址相加,可以确定要访问的寄存器的物理地址,从而进行读写操作。为了方便软件开发者访问设备的寄存器,通常会提供寄存器映射表,该表列出了每个寄存器的
偏移地址
以及其功能描述,开发者可以根据表格中的信息进行寄存器的读写操作。要访问特定寄存器,通常需要将基地址与寄存器
偏移地址
相加,生成要访问的寄存器的物理地址,然后通过该物理地址进行读取或写入操作。是该虚拟设备的基地址,所有寄存器的
偏移地址
都是相对于这个基地址而言的。
汇编语言
21,497
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章