【问题标题】:If Statement Conversion From C to Assembly(Motorola 68k)If 语句从 C 到汇编的转换(摩托罗拉 68k)
【发布时间】:2015-10-27 00:48:26
【问题描述】:

我得到了这样的 IF 语句:

if( (Ch > ‘g’) && (Ch < ‘m’)) || ((A>=0) && (A<=100))
    condition = 1;
else
    condition = 0;

其中 Ch 是 char,A 是 int,condition 是 short int。

我正在尝试将其放入汇编语言中:

Org $8000
CLR.W DO
CLR.W D1
CMPI.B #$67,ch
BGT ;something here...

Org   $9000
ch    DC.B  'a'
A     DC.L   0
condition  DS.W  1

我相信我已经得到了第一个 if 条件,其中 67 是 ascii 代码的十六进制值,用于字母“g”。但我不知道如何在这里实现 AND 语句,我猜 or 语句可以像 else 一样对待?由于 if 的一部分执行或另一部分执行。任何帮助,将不胜感激。

【问题讨论】:

  • 试着画一个流程图。
  • 我已经有了,它并没有帮助:s
  • 如果你真的有一个可以工作的流程图,把它变成汇编应该是一件小事。
  • 啊我现在明白了,我现在想知道如果我比较 0 和 int A,我必须使用 CMPI.L 吗?还是CMPI.B?
  • 既然是int,你要CMPI.L

标签: c if-statement assembly branch 68000


【解决方案1】:

如果你真的有一个可以工作的流程图,把它变成汇编应该是一件小事。

我就不给你画了,给个伪代码渲染一下吧:

    if Ch <= 'g' goto check_second_term
    if Ch < 'm' goto result_one

check_second_term:
    if A < 0 goto result_zero
    if A > 100 goto result_zero
result_one:
    condition := 1
    goto done
result_zero:
    condition := 0
done:

我相信您可以将它们变成cmp+bcc 对。

【讨论】:

  • 嗯,刚刚注意到你反转了所有的操作,这是他们的原因吗?
  • 我没有反转 all :) 原因是这样更方便。对于&amp;&amp;,您可以很容易地看到,如果任何条款失败,则条件失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多