assembly - 拼装跳远表演
问题描述
在汇编中,我有一个带有大约 2000 个 JUMP 点(标签)的 JUMP 表,每个标签都有大约 20-30 行汇编指令......所以是的......它是一个很大的(开关),有大量的源代码...... 。 例如:
.TABLE:
DD .case0
DD .case1
DD .case2
DD .case3
DD .case4
...
...
...
DD .case2000
每个案例都有一些这样的代码(每个案例大约有20-30行指令)
.case0:
push ...
mov ...
push ...
mov ...
push ...
mov ...
...
jmp [4 * eax + .TABLE] ;; it's may be the 'case1000' (eax is our case)
.case1:
push ...
mov ...
push ...
mov ...
push ...
mov ...
...
jmp [4 * eax + .TABLE] ;; it's may be the 'case1000' (eax is our case)
.case2:
push ...
mov ...
push ...
mov ...
push ...
mov ...
...
jmp [4 * eax + .TABLE] ;; it's may be the 'case1000' (eax is our case)
...
...
...
我可能需要跳到每个标签大约 10 次,一会儿我可能在case2
,下一次我可能在case1020
(跳远)
现在我关于这个 Jumps 的问题......例如,如果我想从 to 跳转case2
,case1020
是否有任何性能问题或者这个跳远与例如 'case0' 到 'case100' 完全一样?
我的观点:jmp
即使我们跳过 150Kb 指令,只要改变索引就可以了(跳转不到 127 字节的性能没有差异)......真的吗?
我也知道我们有短跳转,近跳转和远跳转......但我认为短跳转只是指令代码大小(127),跳转127字节或跳转100000000字节之间的性能没有差异......
是真的吗?
解决方案
推荐阅读
- javascript - 加空格生成新行JS
- docker - Docker 在 Windows 上运行,并且仅在两个 Linux 系统之一上运行
- docker - 如何将本地 postgreSQL 连接到 docker (CVAT)
- r - 如何在不重复的情况下附加新函数并更新 .R 文件中的现有函数
- python - MYSQL 中未定义错误名称值 在系统寄存器中使用 Python
- regex - 正则表达式仅在引号内匹配变量
- visual-studio-code - 如何触发`editor.gotoNextSymbolFromResult`?
- excel - 仅当单元格以某些字符开头时,VBA才会根据字符位置替换字符串的多个部分
- javascript - 为什么 onload 使用远程图像而不是本地图像触发?
- java - JAXB Unmarsharller:已映射 XMLAttributes,但未映射其 XmlElements