c - 我需要帮助将 C 代码转换为 Arm 程序集
问题描述
我正在尝试解决手臂装配中的 N 皇后问题。我有 C 代码,需要将其转换为 arm 程序集。我有大部分,但对递归部分有点困惑。我知道我需要推入堆栈,但不知道何时弹出堆栈。
我有以下代码:
__main
PROC
mov r9,#8
mov r8, #0
mov r7, #1
lsl r7,r7,#8
sub r7, #1
mov r3, #0
mov r4, #0
mov r5, #0
mov r6, #0
BL construct
construct
mov r10,#0
mov r1,#0
cmp r3, r9
beq addone
b constructelse
constructelse
orr r11,r4,r5
orr r11,r11,r6
mvn r11,r11
and r10,r11,r7
b loop
loop
cmp r10, #0
beq exit
neg r12, r10
and r1, r12, r10
eor r10, r10, r1
add r3, #1
orr r4, r4, r1
lsl r4, r4, #1
orr r5, r1
orr r6, r6, r1
lsr r6, r6, #1
push {r1}
push {r2}
push {r3}
push {r4}
push {r5}
push {r6}
push {r10}
push {r11}
push {r12}
b construct
addone
add r8, #1
b exit
exit
ENDP
END
我应该能够看到 n 皇后问题有多少解决方案,并将数量保存到参考中。很抱歉代码格式化这是我第一次在这里发帖。
#include <stdio.h>
int SIZE, MASK, COUNT;
void Backtrack(int y, int left, int down, int right)
{
int bitmap, bit;
if (y == SIZE) {
COUNT++;
} else {
bitmap = MASK & ~(left | down | right);
while (bitmap != 0) {
bit = -bitmap & bitmap;
bitmap ^= bit;
Backtrack(y+1, (left | bit)<<1, down | bit, (right | bit)>>1);
}
}
}
int main(void)
{
SIZE = 8; /* <- N */
COUNT = 0; /* result */
MASK = (1 << SIZE) - 1;
Backtrack(0, 0, 0, 0);
return 0;
}
解决方案
推荐阅读
- reactjs - 需要有关使用 React/Redux 或服务器处理复杂状态更新的建议吗?
- android - 允许数据类的属性只接受某些值
- google-cloud-firestore - 如何只允许某些用户读取 Firestore 数据库
- python - 如何同时运行三个带有声音的“.py”文件?
- php - 相加两个百分率
- entity-framework - 在.net core api中链接对象
- ios - 在 iOS LaunchScreen.storyboard 中放置图像会完全禁用启动屏幕
- git - 撤消还原一个分支中的更改
- c - C中的指针和整数问题
- java - “错误:com.google.firebase.iid 包不存在”更新 Firebase Crashlytics 依赖项后