【问题标题】:machine code instructions for a program程序的机器代码指令
【发布时间】:2013-05-08 22:00:46
【问题描述】:

我们如何把程序指令 c = a-b;在机器代码指令中?我已经获得了操作码、a=80、b=81、c=82 的内存地址和程序计数器 = 30 hex。指令长度为 16 位,操作码为 4 位,寄存器为 4 位,内存地址为 16 位。

我只需要知道它是如何开始的正式方式。这是因为我真的不明白我的讲师教什么。如果我能找到明确的方向,那么我有信心在没有讲师帮助的情况下做到这一点。

【问题讨论】:

  • 你为什么不问你的讲师?
  • 我不想问他,因为我真的不了解他 LOl
  • 好的,这就是你的开始:弄清楚如何减去一些东西。你可能有一个减法指令,也许没有——如果没有,看看你是否可以使用a - b == ~(~a + b) 或其他身份,直到你得到一些可实现的东西。可能您只能将两个寄存器相减,在这种情况下,请弄清楚如何将ab 的值从内存中获取到寄存器中。然后弄清楚如何将结果输入c
  • 这是什么指令集?

标签: assembly machine-code low-level-code


【解决方案1】:

助记符看起来像这样:

mov eax, [a] ; move 4 bytes starting at address a to the eax register
sub eax, [b] ; subtract 4 bytes starting at memory address b from the eax register
mov [c], eax ; move the contents of the eax register to the memory address of c

您在操作码中替换操作(movsub),寄存器地址替换为(eax),内存地址替换为(abc)和那么结果就是实际的机器指令。我在这里假设你的数字是 32 位整数,所以我使用的是 x86 处理器的 32 位长的 eax 寄存器,但是你使用的寄存器的细节是任意的,只要它足够大来容纳你的数字。 mov 指令将从提供的内存地址开始读取寄存器可以容纳的尽可能多的字节。

对于本示例,您无需明确对程序计数器执行任何操作,CPU 在执行每条指令时都会递增程序计数器。

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    相关资源
    最近更新 更多