鱼C论坛

 找回密码
 立即注册
查看: 2845|回复: 0

[学习笔记] 汇编语言 - 第6章 包含多个段的程序

[复制链接]
发表于 2019-10-1 18:17:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 SВ 于 2019-10-9 15:46 编辑

没有什么难点,主要是再次提到assume的用法。

ASSUME directive

assume伪指令有几种用法,下面是最主要用法

应用于数据段

使用assume声明指出这个数据段中的所有变量内存寻址时引用的段寄存器,然后遇到一个变量时(这个变量在这个数据段中定义),就是依据这个声明来生成包含这些变量的指令的二进制机器码中的段寄存器部分的数据。

一般情况下,指令根据指令类型有默认的段寄存器来保存变量所在段的段地址,参考:操作数寻址 -> 默认段寄存器,如使用默认段寄存器DS,则assume声明可以省略。
由于MS-DOS加载可执行文件时,DS和ES寄存器指向程序段前缀PSP,所以必须重新初始化段寄存器DS,使它指向变量所在段的段地址。
assume声明等效于段超越前缀(MASM50-PROGGUIDE 5.4节的例子 )

经实验
1.assume声明的作用域从它声明处开始到源程序结束的所有全局范围(而段超越前缀的只作用于使用它的那条指令),除非有新的assume声明或者段超越前缀出现

2.assume声明在改变默认段寄存器情况下会在指令前产生前缀字节,比如assume es:segment name 产生前缀26,表示改变下一条指令的段寄存器为ES段寄存器

其他段待验证
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-5 16:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表