社区
汇编语言
帖子详情
指令是怎样取到它的偏移地址?
RRUURR
2010-12-19 01:56:41
计算机内部的工作原理怎样?
由指令的二进制机器码可以判断出来么?
...全文
554
10
打赏
收藏
指令是怎样取到它的偏移地址?
计算机内部的工作原理怎样? 由指令的二进制机器码可以判断出来么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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执行的是二进制代码
汇编语言中短转移
指令
jmp short
指令
偏移地址
计算
汇编语言中,jmp short
指令
是8位转移
指令
,可以修改ip寄存器的范围为-128~127 (8位补码的表示范围,因为
偏移地址
计算使用的是补码) 短转移
指令
的机器码格式为EB??,其中??表示8位
偏移地址
,接下来研究??的计算方法。 一、公式介绍 要计算jmp short的
偏移地址
,我们要记住公式:
偏移地址
=标记处的
偏移地址
-CPU读完该jmp
指令
后的ip寄存器值 二、方法步骤 1.后跳转 我们引入MASM中的代码片段 DATAS SEGMENT DATAS ENDS CODES SEGMENT
计组(day2)8086
指令
系统——输入输出
指令
、取
偏移地址
指令
、其他传送
指令
知识点输入输出
指令
什么是输入输出
指令
?输入输出
指令
格式及功能输入输出
指令
的实例输入输出
指令
的两种寻址方式及注意事项取
偏移地址
指令
什么是取
偏移地址
指令
?
指令
格式取
偏移地址
指令
的实例其他传送类
指令
输入输出
指令
什么是输入输出
指令
? 输入
指令
:输入
指令
IN用于从I/O端口读数据到累加器AL(或AX)中 输出
指令
:输出
指令
OUT用于把累加器AL(或AX)的内容写到I/O端口 注意 输入输出
指令
中,只有...
速通汇编(五)认识段地址与
偏移地址
,CS、IP寄存器和jmp
指令
,DS寄存器
通常所说的地址指的是某内存单元在整个机器内存中的,把整个机器内存比作一个酒店,内存单元就是这个酒店的各个房间,给这些房间编的门牌号,类比回来就是内存单元的物理地址在第一篇介绍debug的命令时使用过很多命令,不知你还记得与否,可点击快速复习->接下来我用e命令和d命令进行两步操作:在[0000:0000]地址处写入一串数据"123456789abc",然后再用d命令读取以验证是否成功写入可以看到确实成功写入。
关于
偏移地址
的问题
注:此文章是我回答CSDN论坛的一个问题整理后的结果。如下程序(可正常编译、运行):.MODEL SMALL.DATA BUF DB 0123456789.CODE MAIN: MOV AX,@DATA MOV DS,AX LEA DX,BUF ;问题在这里
汇编:LEA(取
偏移地址
)、LES
Table of Contents LEA LES LEA LEA是微机8086/8088系列的一条
指令
,取自英语Load effect address——取有效地址,也就是取
偏移地址
。在微机8086/8088中有20位物理地址,由16位段基址向左偏移4位再与
偏移地址
之和得到。 取
偏移地址
指令
指令
格式如下: LEA reg16, mem lea reg16, m...
汇编语言
21,500
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章