如何将C代码转换为9S12的Freestyle程序集?

时间:2014-06-24 12:58:02

标签: assembly

我已经开始了一个介绍性的装配课程,并且有一个分配来创建说明以执行以下操作。

T = H&安培;〜Ĵ

与此相关的C代码如下:

void main(void)
{
ddrh = 0x00;
ddrj = 0x00;
ddrt = 0xff;

while(1)
{
ptt = (~ptj)&pth;
}
}

DDR是用于设置i / o的方向寄存器。

PT是端口。

非常感谢任何建议或解决方案。

*使用MC9S12C32更新汇编代码

   DDRH equ $0262
   DDRJ equ $026A
   DDRT equ $0242
   PTT  equ $0240
   PTH  equ $0260
   PTJ  equ $0268
        org $4000

   main ldaa #$00
        staa DDRH ;Setting direction register H for all inputs
        ldaa #$00
        staa DDRJ ;Setting direction register J for all inputs.
        ldaa #$FF
        staa DDRT ;Setting direction register T for all outputs.

   loop ldaa PTH  ;load port h to register a
        ldab PTJ  ;load port j to register b
        comb      ;compliment register b contents for ~J
        andb PTH  ;AND logical register b and port H
        stab PTT  :output register b to port T
        bra  loop
        org  $FFFE
        fdb  main

代码集合没有错误,但是当我运行它来模拟处理器时,我收到以下错误代码:

"使用EAR W 0x0262 0x00存储到I / O端口0x4002 staa $ 0262写入未实现的I / O端口0x0262。"

是否有人能够检查这是什么问题,并可能提供严厉的建议来解决这个问题?

UPDATE!发现我的问题,在汇编程序中选择了错误的处理器。必须使用MC9S12DP512而不是MC9S12C32。

1 个答案:

答案 0 :(得分:0)

因为 - 据我所知 - 这是你课程的作业,我不会给你太多的帮助。你应该自己做功课,否则你就不会为考试做好准备了。

您应该首先分析C程序正在做什么。因为你没有做C课程,我可以在这里给你一些帮助:

  • 将值0写入寄存器DDRH
  • 将值0写入寄存器DDRJ
  • 它将值0xFF(= 255)写入寄存器DDRT
  • 在无限循环中,它执行以下步骤:
  • 它读入寄存器PTJ
  • 它会反映刚刚读入的值
  • 它读入寄存器PTH
  • 执行两个值的AND组合
  • 将结果写入PTT寄存器
  • 在循环结束时,在汇编代码中(总是)需要循环的第一条指令的分支/跳转指令

现在您必须在汇编程序中执行所有这些步骤。我相信你知道课程中所有必要的指示。

顺便说一下:你可能想写“飞思卡尔”,而不是“自由式”