搜索
bottom↓
回复: 5

刚看ARM的汇编有几个问题,,,,谢谢大家了

[复制链接]

出0入0汤圆

发表于 2010-11-1 18:18:18 | 显示全部楼层 |阅读模式
1,书上一到题目的要求是这样的“将内存地址0x3000开始的100个字内存填入0x10000001~0x10000064”字数据。。
代码是这样的   
MOV R0 ,#0X3000
MOV R1,#0X10000001
MOV R2,#100
LOOP_1:
        STR R1,[R0],#4                          ;问下这里为什么要加4啊??难道一个地址相对应的内存空间存不下?  ADD R1,R1,#1
   ..................................






2, 还有个就是  将数据从源数据区Src(18内存字单元)拷贝到目标数据区Dst,要求以4字节拷贝,如果不足4字节时则以字尾单元拷贝。
                                             SRC:
                                                   .long 1,2,3,4,5,6,7,8,9,0xa,,,,,,,,,,,,,,,,,

                                             DST:
                                                   .long 0,0,0,0,0,00,0,0,,,,,,,,,,,,,,,,,,
书上的代码是这样的。。                                            
NUM EQU 18
           AREA Copy_Data,CODE,READONLY
           ENTRY
           CODE32
START
           LDR R0,=Src
           LDR R1,=Dst
           MOV R2,#NUM
           MOV SP,#0x9000
           MOVS R3,R2,LSR #2
           BEQ Copy_Words
           STMFD SP!,{R5-R8}
Copy_4Word  ;进行快拷贝每次4个字          ;问下这里要拷贝4次,,每次都是           
LDMIA R0!,{R5-R8}                          ;LOMIA  R0! {R5-R8}咋么不会重复的啊??就是
STMIA  R1!,{R5,R8}                          ;刚从R0取出的地址是从0-3,然后R0自己会从变成                  
SUBS   R3,R3,#1                            ;从4-7开始传数据???                    
BNE     Copy_4Word
                   LDMFD   SP!,{R5-R8}
Copy_Words     ;将剩余的数据以字为单位拷贝
                ANDS R2,R2,#3
                BEQ  Stop
Copy_Word
                LDR R3,[r0],#4
                STR R3,[r1],#4                  ;;问下这里咋么出现了小写的r0了啊???               
                SUBS R2,R2,#1
                BNE Copy_Word
Stop   
                B Stop
                LTORG
               
Src   
        DCD   1,2,3,4,5,6,7,8,9,0XA,0XB,0XC,0XD,0XE,0XF,0X10,0X11,0X12
        
Dst  
                DCD    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
                END

谢谢了。。。。教教,不择么明白。。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-11-1 18:24:10 | 显示全部楼层
1、ARM是32位总线宽度,一次操作32bit,共4字节,所以加 4

出0入0汤圆

 楼主| 发表于 2010-11-1 22:33:02 | 显示全部楼层
回复【1楼】goink 小桂
-----------------------------------------------------------------------
是不是0x3000的值是0x10000001,0x3001-0x3003的值都是0x00000000000,
啊?????0x3004就是0x10000002??????是吗??

出0入0汤圆

发表于 2010-11-4 17:35:19 | 显示全部楼层
MOV R1,#0X10000001这句话要报错吧,ARM只允许一个8位的立即数右移0、2、4、...、30次,0x10000001貌似不能由某个8位的数右移得到。

出0入0汤圆

发表于 2010-11-5 10:15:08 | 显示全部楼层
回复【4楼】Octagram
mov r1,#0x10000001这句话要报错吧,arm只允许一个8位的立即数右移0、2、4、...、30次,0x10000001貌似不能由某个8位的数右移得到。

-----------------------------------------------------------------------

这个不会报错的,仔细看一下汇编指令,ARM汇编会把立即数0x10000001做移位处理的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-12 22:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表