本人刚学汇编,问个基础的问题

lotusword 2009-10-28 08:32:15
cpu执行的下一条指令的物理地址是CS*16+IP,那么cpu是怎么知道指令的长度(有的是2字节,有的是3字节)呢?
...全文
62 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
maning_0 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lotusword 的回复:]
例如:mov ax,0123H在内存中占3个字节。
mov ax,bx在内存中占2个字节,cpu是怎么知道是2个字节还是3个字节
[/Quote]
MOV AX,××××,与MOV AX,BX 根本就是两个不同的机器码。。
虽然都是MOV指令。
MOV AX,××××
是移动立即数的机器码
MOV AX,BX
是移动寄存器数据的机器码。根本就是不同的。。长度当然不同。。
第一个机器码 根据机器码得出是传送立即数,所以后面的16位立即数占用两个字节。
而寄存器传送指令,由于寄存器是有限的,所以只需1个字节就可以表示,所以是两个字节。。。
maning_0 2009-10-28
  • 打赏
  • 举报
回复
每条指令的编码都是不一样的,根据编码,CPU当然知道每条指令的长度。。
比如
MOV al,×× 和 MOV EAX,××××××××
这两个指令虽然都是MOV指令,但是其机器码其实是不同的,也就是说MOV AL 是一条机器码指令,而MOV EAX实际上又是另一条机器码指令。。
虽然在写汇编时都是MOV指令。。。
CPU在分析了开头的不同的MOV机器码之后,就知道了后面要移动的数据的长度,自然就知道了指令的实际长度。。
lotusword 2009-10-28
  • 打赏
  • 举报
回复
我不是说怎么判断一个字节的长度,而是说怎么判断一条指令是几个字节?
alZou 2009-10-28
  • 打赏
  • 举报
回复
cpu是根据机器码来判断字节长度的
lotusword 2009-10-28
  • 打赏
  • 举报
回复
例如:mov ax,0123H在内存中占3个字节。
mov ax,bx在内存中占2个字节,cpu是怎么知道是2个字节还是3个字节

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧