assembly - ARM 程序集嵌套循环
问题描述
我是 ARM 汇编语言的新手,我知道如何制作一个简单的 for 循环,但是,当我尝试将概念应用于嵌套循环时,我对如何设置它感到非常困惑。我想知道是否有一般设置for循环的规则?也许如果我可以使用该规则来制作嵌套循环?
例如,如果我有一个用 C 编写的简单嵌套循环代码,如下所示,在汇编中会是什么样子?非常感谢详细的解释,谢谢!
for(int i = 0; i < a; i++){
for(int j = 0; j < b; j++){
int sum = 0;
for(k = 0; k < c; k++){
for( l = 0; l < d; l++){
int temp1 = i+k;
int temp2 = j+k;
}
}
}
}
解决方案
对于两个嵌套循环,我通常会做这样的事情。*请记住,此代码i
(外循环计数器)将为 R0,j
(内循环计数器)将为 R1。R2 用于计算内循环和外循环的循环数。
AREA myCode, CODE, READONLY
ENTRY
EXPORT __main
__main
MOV R2, #0
MOV R0, #2 ; ** outer loop (loop 1) counter initialization **
LOOP1 CBZ R0, STOP ; if (R0 == 0 && R1 == 0) then branch to somewhere. (I'm just ending program here)
; between outer and inner loop
; could do anything but I'm just incrementing R2
ADD R2, R2, #1
MOV R1, #3 ; ** inner loop (loop 2) counter initialization **
LOOP2 CBZ R1, CNTULP1
; code inside of inner loop will be here
; could do anything but I'm just incrementing R2
ADD R2, R2, #1
; Notice) when you need to continue loop2 => branch to CNTULP2. else if you wanted to continue loop1 => branch to CNTULP1
; and when you wanted to break loops => branch out of them for example branch to STOP
CNTULP2 ; continue loop2 (inner loop)
SUB R1, R1, #1 ; decrement inner loop counter
B LOOP2
CNTULP1 ; continue loop1 (outer loop)
SUB R0, R0, #1 ; decrement outer loop counter
B LOOP1
STOP B STOP
END
推荐阅读
- php - PHP 返回 %u05D0
- vba - Excel VBA过滤器复制并粘贴在单独工作表上最后使用的行下
- ios - Ionic 应用程序在 iOS 设备的第一个屏幕上冻结
- r - tidyverse:所有列组合的卡方
- php - 为什么 "if($_SESSION['count'] >= 3" 给我错误?
- python - 仅将数据框中的新值附加到熊猫中的另一个数据框
- swift - 当应用程序处于后台或终止状态时,如何找到用户位置?
- android - MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri) 返回 null
- sql - 在 SQL 中向表中添加相同的随机行
- iot - NodeMCU v1.0(ESP8266-12E)的Arduino草图没有编译错误,但在NodeMCU v1.0(ESP8266-12E)板上没有工作