如何创建生成A86汇编代码的程序?

时间:2019-11-30 17:33:55

标签: c++ assembly x86 compiler-construction

在计算机系统概论课中,我们被要求解决以下问题。老实说,我不明白讲师要我们做什么。

在互联网上搜索了几天之后,现在我认为程序应该执行以下操作:

Input:

x = ( x & y ) | 0f

Output:

mov ax,x
and ax,y
or ax,0FH
mov [x],ax

讲师是否还希望程序计算给定的表达式?我真的很困惑。

关于上面的代码,您认为我走对了吗?

项目问题如下:

  

(使用C或C ++或Java或Python语言实现该项目)

     

在此项目中,您将实现一个名为 bitcalc 的程序,该程序为涉及 | <的表达式和赋值语句序列生成A86汇编代码。 / strong>和操作的定义如下:

**Operation** **Meaning**

a & b Bitwise AND

a | b Bitwise OR

a ? b Evaluates to b if a > 0 and 0 otherwise
     

表达式将是中缀表达式,并且可能还包含括号。假设&的优先级高于|和?。两者|和?具有相同的优先级。下面给出了bitcalc用法的示例:

bitcalc

Suppose the file example.bit contains:

x = 81

y = ff

x = ( x & y ) | 0f

y = x | y ? 03

x

y

%bitcalc example.bit

example.asm was generated.

%a86 example.asm

%example

8f

03
     

请注意以下几点:

     

•您可以假定所有值和运算结果将适合8位。

     

•您可以假定一个未定义的变量的值为0。

     

•您可以假定变量名称是字符范围 g-z G-Z 中的单个字符。

     

•您可以假设每个输入令牌之间都有一个空白。

     

•所有常量均以2位十六进制格式编写。

     

•如果语句是表达式,则将表达式的值输出为2位十六进制数字。

原始格式的问题是here

0 个答案:

没有答案