上次的几个问题没得到满意答案

GGJJyangjinhan 2009-02-20 10:06:30
这次分开问:

问题1
实地址模式的范围是0到FFFFF。可寻址1MB内存空间,保护模式范围是0到FFFFFFFF,可寻址4GB内存,我内存只有512它是怎么寻址4GB的?用虚拟内存吗?

问题2
DOS程序应该是16位的吧,如何区分32位程序16位程序。

问题3
内存和寄存器都有寻址最大范围吗,如果有是多少到多少?

问题4
16位模式程序中的跳转目标地址如果超出了一个有符号字节偏移所允许的范围,MASM就会给出一个“relative jump out of range”的错误假如指令的平均长度是3个字节,循环中大约可以存放40条指令。要绕过这种限制,避免错误信息,可以先跳转到一个无条件指令处(跳转范围是16位的有符号字),再通过无条件指令跳转到真正的目的地址。

上面这段话说的范围是怎么规定的比如:跳转范围是16位的有符号字?

(16位模式程序中的跳转目标地址如果超出了一个有符号字节偏移所允许的范围)范围是多少?如果是32位的呢?

问题5
偏移最大的范围是多少?





L1
A word 12
mov ecx,12345
loop L1


如果这样的话:

loop L1
A word 12
mov ecx,12345
L1

中间的过程不会被执行吧?

L1
mov ecx,12345
mov ecx,1234
JA L1

这样会发生跳转吗?如果不会那应该写成什么样?


如果会
L1
A word 12
mov ecx,12345
loop L1

就可以代替了吧
L1
mov ecx,12345
mov ecx,1234
JA L1





...全文
122 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlj84237485 2009-02-21
  • 打赏
  • 举报
回复
帮顶一下
BAYNPU 2009-02-20
  • 打赏
  • 举报
回复
上面这些都是很基础的东西呀。
cnzdgs 2009-02-20
  • 打赏
  • 举报
回复
问题1:
是虚拟内存,通过保护模式的分页机制实现。

问题2:
主要看程序中如何使用地址,通常,如果使用32位偏移地址就是32位程序,使用16位地址就是16位程序。

问题3:
内存地址范围由CPU及其运行模式而定,X86实模式就是0~FFFFF,保护模式是0~FFFFFFFF;寄存器由CPU指令集决定。

问题4:
这段话是说8086的条件跳转指令的,80186以上指令集就没有这个限制了,但loop指令还是有这个限制的,范围是-126~129。

问题5:
L1
A word 12
mov ecx,12345
loop L1

如果这样的话:

loop L1
A word 12
mov ecx,12345
L1
中间的过程不会被执行吧?
如果ecx不等于0,中间的过程就不会执行。

L1
mov ecx,12345
mov ecx,1234
JA L1
这样会发生跳转吗?如果不会那应该写成什么样?
mov指令不影响标志位,是否会跳转取决于执行到这里时标志位的状态。

如果会
L1
A word 12
mov ecx,12345
loop L1
就可以代替了吧
L1
mov ecx,12345
mov ecx,1234
JA L1

fabric区块链 2009-02-20
  • 打赏
  • 举报
回复
学习

21,500

社区成员

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

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