Assembly 如何将C代码转换为9S12自由泳的汇编代码?

Assembly 如何将C代码转换为9S12自由泳的汇编代码?,assembly,Assembly,我已经开始了一个介绍性的组装课程,并有一个作业来创建执行以下操作的说明 T=H&~J 与此相关的C代码如下所示: void main(void) { ddrh = 0x00; ddrj = 0x00; ddrt = 0xff; while(1) { ptt = (~ptj)&pth; } } DDR是用于设置i/o的定向寄存器 港口是港口 如有任何建议或解决方案,将不胜感激 *使用MC9S12C32更新部件代码 DDRH equ $0262 DDRJ equ $026A

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

T=H&~J

与此相关的C代码如下所示:

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

while(1)
{
ptt = (~ptj)&pth;
}
}
DDR是用于设置i/o的定向寄存器

港口是港口

如有任何建议或解决方案,将不胜感激

*使用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
代码assebmles没有错误,但是当我运行它来模拟处理器时,我收到以下错误代码:

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

是否有人能够检查这是在哪里偷懒,并可能提供严厉的建议来解决这个问题


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

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

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

  • 它将值0写入寄存器DDRH
  • 它将值0写入寄存器DDRJ
  • 它将值0xFF(=255)写入寄存器DDRT
  • 在无止境循环中,它执行以下步骤:
  • 它在寄存器PTJ中读取
  • 它反转刚刚读入的值
  • 它在寄存器PTH中读取
  • 它执行两个值的AND组合
  • 它将结果写入PTT寄存器
  • 在循环结束时,汇编代码中(始终)需要循环第一条指令的分支/跳转指令
现在您必须在汇编程序中执行所有这些步骤。我相信你从你的课程中知道所有必要的指导


顺便说一句:你可能想写“Freescale”,而不是“Freestyle”

一个从C到汇编程序的转换器通常被称为C编译器。肯定是要写Freescale。马丁,听起来你可能很精通这一点。我已经为此尝试了我的汇编代码,汇编程序正在返回错误。使用MC9S12C32微控制器。将更新原始问题的代码。也许在头上踢一脚会有助于沟通,让我明白这一点。穿上靴子了吗?