【问题标题】:instructions found in _sendrec.s_sendrec.s 中的说明
【发布时间】:2012-07-10 04:38:00
【问题描述】:

我偶然发现了以下说明 src/lib/i386/rts/_sendrec.s

一开始,写出以下语句。

SEND = 1

RECEIVE = 2

BOTH = 3

SYSVEC = 33

SRCDEST = 8
MESSAGE = 12

我如何解释上述陈述?例如,SRCDEST = 8,我应该读它吗 因为 SRCDEST 的值为 8。如果是,则以下语句不 对我有意义。 如果不是,什么是 SRCDEST、MESSAGE 和 BOTH?它们是内置的吗 职能?如果是,它们在 .s 文件中的什么位置定义?

基于 cmets,eax = dest-src。 dest 和 src 的值是多少? ebx = message pointer。 这是否意味着 ebx 是对基指针的引用? 至于mov ecx, BOTH ! _sendrec(srcdest, ptr),到底是怎么回事? 如果有人可以对以下陈述或 给我一个或两个链接。已经在网上查了好几天了,没有运气 查找信息。感谢您的时间。

__sendrec:

mov eax, SRCDEST(ebp)   ! eax = dest-src

mov ebx, MESSAGE(ebp)   ! ebx = message pointer

mov ecx, BOTH       ! _sendrec(srcdest, ptr)

【问题讨论】:

    标签: minix


    【解决方案1】:

    SEND、RECEIVE 和 BOTH 是分别具有值 1、2 和 3 的常量。它们代表您正在执行的操作(1 表示“发送”,2 表示“接收”,3 表示“发送和接收”)。

    SRCDEST 和 MESSAGE 常量是存储代表源/目标和消息的值的堆栈上的偏移量。

    SYSVEC 是中断号。

    【讨论】:

    • 感谢您的快速回复。 SEND、RECEIVE 和 BOTH 是分别具有值 1、2 和 3 的常量,3 表示发送和接收。 “move ecx, BOTH”表示计数器寄存器的值为 3 或同时发送和接收的操作。将各个部分放在一起时很难理解它。
    • 是的,mov ecx, BOTH 将值 3 放入 ECX。不要将其视为“计数器寄存器”,因为它并不总是用于计数。在这种情况下,它只是用来告诉内核它应该发送还是接收。
    • 感谢您为我解决了这部分问题。还没有读入内核编码。所以我假设当 mov ecx, BOTH 被执行时,内核将检查 ecx 中保存的值。如果值为 3,内核将执行发送和接收操作。所以 SRCDEST(ebp) 或 MESSAGE(ebp) 是一种语法,它表示与基指针的偏移量,而不是表示源/目标和消息的值存储在堆栈上的帧指针。
    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2019-03-22
    • 2020-07-24
    • 2015-10-10
    • 2013-05-01
    • 2013-07-13
    相关资源
    最近更新 更多