Assembly 如何将C代码转换为9S12自由泳的汇编代码?
我已经开始了一个介绍性的组装课程,并有一个作业来创建执行以下操作的说明 T=H&~J 与此相关的C代码如下所示: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
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微控制器。将更新原始问题的代码。也许在头上踢一脚会有助于沟通,让我明白这一点。穿上靴子了吗?