assembly - 分段符号
问题描述
我试图了解一些为 MS DOS 编写的程序。指令 mov ax, ds:4Ch 是移动 ds*16 + 4Ch 的值还是移动存储在地址 ds*16 + 4Ch 的值?
解决方案
这是一个内存操作数,因为它使用ds:
. MASM 风格的 Intel 语法不需要[]
内存操作数。
此外,没有一条机器指令可以计算整数寄存器中的线性地址。分段的重点是处理对于单个寄存器来说太大的线性地址。如果您处于实模式(其中段寄存器值是基数,例如mov ax, ds
/ shl ax, 4
),您可以手动执行此操作,但如果段寄存器值只是一个选择器,则不那么容易。286/386 保护模式或虚幻模式。
lea ax, [es: bx + si + 12]
例如只处理偏移量计算,忽略段基数。
推荐阅读
- python - 用 Solveset 求解四变量不等式系统
- swift - Extract Reality Composer scene for ARQuickLook
- python - slackclient python - 异步 RTM 客户端
- visual-studio - Cmake 在 Windows 中显示“PYTHON_LIBRARY-NOTFOUND”
- angular - 如何在 PrimeNG 表中单独使用分页器并显示页面信息?
- javascript - 如何更改轴 Chart.js 的显示
- android - LiveData observable 如何异步处理 Room 查询?
- node.js - 在 execute_payment_json 中获取可变金额
- kotlin - 无法使用 String 类型的 accountToPay (accountID) 更新SettlementMethod
- jquery - 使用 Scrollify 时,我得到 Scrollify is not a function 错误