m0_49827079 2023-09-26 09:07 采纳率: 28.6%
浏览 16
已结题

如何用RAM指令集完成两个无符号字符加减乘除在存入地址位置

img


img


img

实验三截图:
刚学这个,不会做作业,求正确答案并表明一下注释方便了解谢谢各位了!!

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-09-26 09:11
    关注

    引自免费微信小程序-皆我百晓生,希望对题主有所帮助,如有帮助,还望采纳。


    • 以下是第1题的解答。下面还有第2题的解答,但由于第二题你所给的信息不足,该解答仅作参考,你可以补充更多信息以获得更准确的解答

    首先,我们需要将ARM指令转化为对应的二进制指令来执行这些操作。下面是对应的ARM指令以及其对应的二进制指令:

    (1) 求和:

    LDR r0, =0x1234
    LDR r1, =0x5678
    ADD r2, r0, r1
    STR r2, [0x20002000]
    

    (2) 求差:

    LDR r0, =0x1234
    LDR r1, =0x5678
    SUB r2, r0, r1
    STR r2, [0x20002004]
    

    (3) 求积:

    LDR r0, =0x1234
    LDR r1, =0x5678
    MUL r2, r0, r1
    STR r2, [0x20002008]
    

    (4) 求商:

    LDR r0, =0x1234
    LDR r1, =0x5678
    UDIV r2, r0, r1
    STR r2, [0x2000200c]
    

    (5) 逻辑左移:

    LDR r0, =0x1234
    LSL r0, r0, #2
    STR r0, [0x20002010]
    

    (6) 逻辑右移:

    LDR r0, =0x1234
    LSR r0, r0, #2
    STR r0, [0x20002014]
    

    (7) 算数右移:

    LDR r0, =0x1234
    ASR r0, r0, #2
    STR r0, [0x20002018]
    

    (8) 循环右移:

    LDR r0, =0x1234
    ROR r0, r0, #2
    STR r0, [0x2000201c]
    

    (9) 按位与:

    LDR r0, =0x1234
    LDR r1, =0x5678
    AND r2, r0, r1
    STR r2, [0x20002020]
    

    (10) 按位或:

    LDR r0, =0x1234
    LDR r1, =0x5678
    ORR r2, r0, r1
    STR r2, [0x20002024]
    

    (11) 按位异或:

    LDR r0, =0x1234
    LDR r1, =0x5678
    EOR r2, r0, r1
    STR r2, [0x20002028]
    

    (12) 清除bit[5:4]位:

    LDR r0, =0x1234
    MOV r1, #0xCF
    AND r2, r0, r1
    STR r2, [0x2000202c]
    

    (13) 设置bit[7:6]位为1:

    LDR r0, =0x1234
    MOV r1, #0xC0
    ORR r2, r0, r1
    STR r2, [0x20002030]
    

    (14) 翻转bit[9:8]位:

    LDR r0, =0x1234
    MOV r1, #0x300
    EOR r2, r0, r1
    STR r2, [0x20002034]
    

    请注意,这些指令是按照ARM汇编语言编写的。在实际的程序中,你可能需要将这些指令转换为对应平台的机器码,并使用特定的开发环境或汇编器来运行它们。


    以下是第2题的解答


    根据你提供的代码,修改计算两个数求和并保存结果的部分,更新后的代码如下:

    PRESERVE8 
            THUMB
            AREA  RESET,DATA,READONLY
            DCD     0X20001000
            DCD   Reset_Handler
                
            AREA  HELLO,CODE,READONLY
    Reset_Handler    proc
            LDR R0, =data1   ; 加载data1地址到R0寄存器
            LDR R1, =data2   ; 加载data2地址到R1寄存器
            LDR R0, [R0]     ; 从data1地址读取数值到R0寄存器
            LDR R1, [R1]     ; 从data2地址读取数值到R1寄存器
            ADD R2, R0, R1   ; 将R0和R1寄存器的值相加并保存到R2寄存器
            LDR R0, =data3   ; 加载data3地址到R0寄存器
            STR R2, [R0]     ; 将R2寄存器中的结果保存到data3地址中
            B HERE
            
            ALIGN
    data1
            DCD 30           ; 将30保存到data1地址中
    data2
            DCD 50           ; 将50保存到data2地址中
            
            AREA    dd_data,DATA,READWRITE
    data3
            DCD 0            ; 将0保存到data3地址中
                
            END
    

    请将更新后的代码加载到ARM开发环境中编译、烧录到硬件上,并执行程序。然后,你可以使用调试器或者内存查看工具查看0x20000010地址空间中的内容,并截图提交给老师。请注意,在截图中能清晰看到0x20000010地址上所保存的结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月26日
  • 已采纳回答 9月26日
  • 修改了问题 9月26日
  • 修改了问题 9月26日
  • 展开全部