首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我在LC-3模拟器中看到的是R3寄存器,而不是我在sample.bin文件中写入的R1?

LC-3模拟器是一种基于LC-3体系结构的计算机模拟器,LC-3是一种简化的计算机体系结构,它只有8个通用寄存器,分别是R0-R7。在LC-3模拟器中,R3寄存器是程序计数器(PC),用于存储当前指令的地址。

在LC-3模拟器中看到的是R3寄存器,而不是在sample.bin文件中写入的R1,是因为在LC-3汇编语言中,寄存器的编号是从0开始的,而不是从1开始。因此,当我们在汇编程序中使用R1寄存器时,实际上是使用的是R2寄存器。

LC-3模拟器中的寄存器编号与LC-3汇编语言中的寄存器编号是一致的,这是为了方便程序员在编写和调试程序时的理解和使用。因此,在LC-3模拟器中看到的是R3寄存器,实际上对应的是LC-3汇编语言中的R2寄存器。

LC-3模拟器是一种用于学习和理解计算机体系结构的工具,它可以帮助开发人员深入了解计算机的工作原理和指令执行过程。通过使用LC-3模拟器,开发人员可以模拟和调试他们编写的LC-3汇编程序,以确保程序的正确性和性能。

推荐的腾讯云相关产品:腾讯云云服务器(CVM) 腾讯云云服务器(CVM)是腾讯云提供的弹性计算服务,可以快速部署云服务器实例,提供高性能的计算能力。您可以根据自己的需求选择不同配置的云服务器实例,包括CPU、内存、存储等。腾讯云云服务器支持多种操作系统,包括Windows和Linux,可以满足不同应用场景的需求。

产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

400 行 C 代码实现一个虚拟机

C 或 C++ 之上实现一个自动垃圾回收机制并不容易 ,因为程序无法看到它自身栈或变量。但是,虚拟机它运行程序“之外”,因此它能够看到栈上所有的内存引用 。...寄存器模式,第二个数存储寄存器,和第一个数类似。这个寄存器称为 SR2,保存在第 0-2 比特。第 3 和 第 4 比特没用到。...立即模式,第二个数直接存储指令不是寄存器。这种模式更加方便,因 为程序不需要额外指令来将数据从内存加载到寄存器,直接从指令中就可以拿到这个值。...这是因为它们没有给 LC-3 带来任何新功能,只是提供了一种方便地执行任务方式(和 C 系统函数类似 )。官方 LC-3 模拟器,trap routines 用汇编实现。...注:这就是为什么程序从 0x3000 不是 0x0 开始原因。低地址空间特意留出来 给 trap routine 用。 规范只定义了 trap routine 行为,并没有规定应该如何实现。

86320

400 行 C 代码实现一个虚拟机

C 或 C++ 之上实现一个自动垃圾回收机制并不容易 ,因为程序无法看到它自身栈或变量。但是,虚拟机它运行程序“之外”,因此它能够看到栈上所有的内存引用 。...寄存器模式,第二个数存储寄存器,和第一个数类似。这个寄存器称为 SR2,保存在第 0-2 比特。第 3 和 第 4 比特没用到。...立即模式,第二个数直接存储指令不是寄存器。这种模式更加方便,因 为程序不需要额外指令来将数据从内存加载到寄存器,直接从指令中就可以拿到这个值。...这是因为它们没有给 LC-3 带来任何新功能,只是提供了一种方便地执行任务方式(和 C 系统函数类似 )。官方 LC-3 模拟器,trap routines 用汇编实现。...注:这就是为什么程序从 0x3000 不是 0x0 开始原因。低地址空间特意留出来 给 trap routine 用。 规范只定义了 trap routine 行为,并没有规定应该如何实现。

86820

WinMIPS64汇编指令详解

操作数为指令自身常数立即数 addi r2,r1,1 r2=r1+1  寄存器寻址 操作数为寄存器值 add r2,r1,r0 r2=r1+r0  基址寻址 以基址寄存器值和立即数常数之和作为地址...load upper half of register immediate,不是很懂@_@ 存储数据到内存 sb sb rs,imm(rd) 基址偏移寻址,存储一个字节8位,M[rd+imm]...,程序直接跳转到label并保存程序当前下一条指令地址到r31 jalr jalr rs 伪直接寻址,程序直接跳转到rs地址并保存程序当前下一条指令地址到r31 移位 为什么没有算术左移,因为算术左移和逻辑左移效果一样...要写入终端: 将内存地址设置为要写入值DATA 将适当写入内存地址CONTROL 要从终端读取: 将适当写入内存地址CONTROL 从内存地址读取输入DATA CONTROL...dadd r5,r5,r3 zero: dsll r3,r3,1 dsra r4,r4,1 daddi r1,r1,-1 bne r1,r0,loop daddi r1,r0,cue2 #

57240

大学课程 | 基于WINDLX系统结构实验

Windows、图形化、交互式模拟器,能够演示DLX流水线如何工作,它采取伪汇编形式编码,模拟流水线工作方式。...图2 程序装入界面 3、运行程序并观察 进行单步调试,WinDLX模拟器6个子窗口观察程序执行情况。观察程序运行总时钟周期,产生相关种类以及每种相关数量。...6、解决控制相关 将gaillv.s循环体展开形成新文件gailv2.s,采用循环展开方法减少控制相关,观察控制相关数量变化。...),r1 ;将r1寄存器数放入r3寄存区中所存数地址存储器 addi r3,r3,4 ;r3后移...第一条指令结束后直接将寄存器r8内容更新,第二条指令结束后直接将寄存器r12数据更新,以此来消除数据相关,如图7所示。

87920

Modbus PLC攻击分析:Python和Mbtget读写PLC

添加端口之后,打开我们计算机设备管理就增加了如下端口示意图: ? 配置好串口之后,接着来配置我们模拟器Modbus Slave(PLC),为什么要用模拟器呢?...实际工业系统应用,Modbus TCP使用也更加普遍。...二、Mbtget工具介绍: 介绍完了用代码来读取Modbus PLC值,大家是不是觉得还是比较麻烦,用个工具不香吗?哈哈,接下来介绍就是轻量级工具——Mbtget。...接下来填写-r3读保持寄存器,-u1代表UID为1,-a100代表读取地址从一百位起,-n16代表读取16位值,再接上PLCIP,就得到了如下图,成功读取了保持寄存器: ?...最后我们选择演示写值入寄存器,-w6代表写入单个保持寄存器,12代表写入值,-a1代表从地址第一位开始,-d代表将Tx(发送transport)和Rx (接受receive)用十六进制表示出来,如下图所示

3K20

代码里-3>>1-2但3>>11,-32却又是-1,为什么

: asr.w r3, r2, r3 无符号数移位操作: lsr.w r3, r2, r3 以上指令意思将r2值右移r3次,并将结果赋值到r3。...交叉编译工具链,那么可以看到div函数调用指令: sdiv r3, r2, r3, div_u函数调用指令: udiv r3, r2, r3 显然除法对于有符号数和无符号数做了区分...此处我们主要看有符号数除法和无符号数除法区别,汇编篇幅太长,在此只截取有符号数除法中有,而无符号数除法不存在也不需要那部分代码,这样就能看到-3/2和3/2区别。...有符号数除法一开始处理: //此处被除数r0,除数r1 : cmp r1, #0 //判断r1和0关系,并更新cpsr寄存器 beq.w 1098a <.divsi3...ip寄存器,但是不会更新cpsr寄存器 it mi //判断cpsrNegative Flag negmi r1, r1 //如果r1为负数则改成正数 subs r2, r1,

1.1K20

变量访问被ARM架构安排明明白白

作为过来人,发现很多程序猿新手,在编写代码时候,特别喜欢定义很多独立全局变量,不是把这些变量封装到一个结构体,主要原因图方便,但是要知道,这其实是一个不好习惯,而且会降低整体代码性能。...举例来说,同样访问外设寄存器,过去8位和16位机时代,人们喜欢给每一个寄存器都单独绑定地址——当作全局变量来访问,现在Cortex架构上更鼓励底层驱动以寄存器页(也就是结构体)为单位来定义寄存器...将r2内容那个写入r3对应指向内存,即xx标号对应内存 二、结构体代码反汇编 1....执行结果 可以看到代码已经被优化到5条。 14. 把peng地址40008024装载到r3 15. r0写入立即数0x11 16. r1写入立即数0x22 17. r0写入立即数0x33 18....通过stm指令将r0、r1、r2值顺序写入到40008024内存

85630

第008课 第1个ARM裸板程序及引申(点亮LED灯)

2440一个SOC,它里面的CPU有R1、R2、R3……等 寄存器; 它里面的GPIO控制器也有很多寄存器,如 GPFCON、GPFDAT。...这两个寄存器有差异写代码时候,CPU里面的寄存器可以直接访问,其它寄存器要以地址进行访问。...写程序需要用到几条汇编代码: ①LDR (load):读寄存器 举例:LDR R0,[R1] 假设R1x,读取地址x上数据(4字节),保存到R0; ②STR (store):写寄存器 举例:STR...undefined 20: 56000054 undefined 第一列地址,第二列机器码,第三列汇编; 反汇编文件里可以看到,ldr r1, =0x56000050被转换成ldr...(下一条指令)保存在lr寄存器; ⑧LDM/STM 读内存,写入多个寄存器/把多个寄存器写入内存 可搭配后缀有 过后增加(Increment After)、预先增加(Increment Before

1K10

【译】超硬核|自制 CPU 上运行 Rust

很多人构建了他们自制CPU,要么实际面包板上,要么软件,用于模拟器或电路合成 。...指令组由独立子电路处理,它们都写入共享总线。 总线(Bus) “Bus 一个令人惊讶多义词。它在很多领域都有定义,甚至电子和硬件领域,它也被用来做各种事情。...和 H(半字,16位),要么 B(字节,8位) {destination}:目标寄存器,要读出/写入 {base}, {offset}:内存地址(将是两者值之和) 比如,ldrh r1, [r2..., r3] 大致相当于C代码r1 = *(short*)(r2 + r3)。...由于不是所有的指令都被支持(有些指令由我自制汇编器模拟),不能只是建立ARM二进制文件并加载它们。

1.5K30

安卓逆向:这是一篇逆向基础函数ARM32刨根问底。

而对于ARM汇编来说,如果目标文件包含了外部调用,必须满足以下条件: 1.外部接口数据栈一定是8位对齐,也就是要保证进入该汇编代码后,直到该汇编程序调用外部代码之间,数据栈栈指针变化为偶数个字...参数传递时,将所有参数看做存放在连续内存单元字数据。...计算机,栈非常重要。这个寄存器保存着栈顶指针。这里可以看到更多关于栈信息。 r14:链接寄存器(link register)。存储着当被调用函数返回时,将要执行下一条指令地址。...ARM指令系统地址递减栈,入栈操作参数入栈顺序从右到左依次入栈,参数出栈顺序则是从左到右你操作。包括push/pop和LDMFD/STMFD等。 3.函数参数怎样进行传递?...下例栈就是用于存储保存局部变量。 ? ? 栈用于存储返回值 ? ? Str r0,[r7,#12]意思将返回值R0写入到栈[r7,#12]位置 7. 栈帧函数使用?

3.4K74

安卓逆向:这是一篇逆向基础ARM32指令集总结

TST(位测试指令) 来检查是否设置了特定位。操作数 1 要测试数据字操作数 2 一个位掩码,TST指令将操作数1与操作数2做逻 辑与运算,和ANDS区别就是不保存结果。...STR R0,[R1],#8 ;将R0字数据写入R1为地址存储器,并将新地址R1+8写入R1。...STRB R0,[R1];将寄存器R0字节数据写入R1为地址存储器。 STRB R0,[R1,#8] ;将寄存器R0字节数据写入以R1+8为地址存储器。...STRH指令用于从源寄存器中将一个16位半字数据传送到存储器。 STRH R0,[R1] ;将寄存器R0半字数据写入R1为地址存储器。...STRH R0,[R1,#8] ;将寄存器R0半字数据写入以R1+8为地址存储器

1.9K54

网工小白升级打怪篇(五)静态路由详解及案例分享

只有当主链路发生故障时候才会开始转发数据,起到备份路由作用。 6常见问题 1)为什么要有默认路由 路由得查看路由表决定怎么转发数据包,用静态路由一个个配置,繁琐易错。...当我们手工关闭R1e0/2口和R3e0/2时,R1因去往目的网络192.168.2.0/24下一跳地址13.1.1.2/24不可达,所以相关静态路由会失效,此时,下一跳地址为12.1.1.2/...24静态路由将被激活,R3因去往目的网络192.168.1.0/24下一跳地址13.1.1.1/24不可达,所以相关静态路由会失效,此时,下一跳地址为23.1.1.2/24静态路由将被激活并写入到路由表...我们称这样路由为浮动路由。又因为这是一条静态路由,我们称之为浮动静态路由。 ? 查看路由表: R1: ? R3: ? 主链路正常情况下,只有主路由会出现在路由表。...主链路出现故障时,浮动静态路由会被激活并加入到路由表,承担数据转发业务。 【扩展】路由条目被写入到路由表必备条件下一跳可达。因为下一跳不可达就意味着这条路由不可用,所以不会写入到路由表里面。

1.2K30

第1阶段——uboot分析之硬件初始化start.S(4)

第2行_start之所以有8种不同异常处理,2440芯片手册已经规定好了,如下图1: ?  ...将中断IRQ所对应R14_irq寄存器并放入到 PC ,如下图,中断IRQ所对应R14_irq寄存器,执行MOVS R14_svc . ? b....//将0x33F806C8与0x33F80000相减,得到现在13个寄存器NOR Flash上存放开始地址 ldr r1, =BWSCON //将BWSCON寄存器地址值存到r1 (第一个存储器寄存器首地址...(r3等于SMRDATA里面值), 同时r0地址+=4; str r3, [r1], #4 //将r3内容存到r1所指地址(向寄存器地址里写入r3值),同时r1地址+=4; cmp r2, r0...ldr r3, _bss_start //r3等于_bss_start里内容,(连接脚本u-boot.lds定义,代码段结束地址) sub r2, r3, r2 //r2等于代码段长度

1.1K80

硬件与编程语言内存模型

本文讨论编程语言内存模型,均在讨论对应编程语言specification,不是讨论编译器实现。本文对编程语言specification和编译器行为不做判断。...执行给定程序时,硬件和编译后代码究竟是如何执行,主要受内存数据更改可见性和一致性影响,规定内存数据可见性和一致性被称为“内存一致性模型”(memory consistency model)...简而言之,x86-TSO内存顺序可以被理解为:每个处理器均有其写缓存,因此每个处理器写操作有顺序写入内存时,该次写入来自哪个处理器写缓存不确定,但是对内存写入有一个总写入顺序(Total...x一开始就被存入寄存器,从而打印0。...这里,假设变量值来自共享内存,但执行过程因为寄存器数量有限不得不覆盖该变量所占用寄存器,则Go需要把该变量保存到栈不是像C++一样后续使用时再次读取该值。

40050

MIPS指令集实验

小程序,首先写好一些数据包括CONTROL和DATA地址以及字符串Hello World,然后将CONTROL和DATA地址存储寄存器以之作为基址,将字符串首地址写入DATA,将4写入CONTROL...冒泡排序 课本上swap函数和sort函数对于排序这64位整数不适合,而且也有些许bug,因此选择自己重写这两个函数。...,不过加上了所对使用寄存器栈保存 swap: daddi r29,r29,-16 sw r8,12(r29) sw r9,8(r29) sw r10,4(r29) sw r31,0(r29)...) lw r31,0(r29) lw r10,4(r29) lw r9,8(r29) lw r8,12(r29) daddi r29,r29,16 jr r31 然后写sort函数,同样要注意使用栈来保存所使用到寄存器值...(r29) lw r2,8(r29) lw r1,12(r29) daddi r29,r29,16 jr r31 最后主函数编写,先初始化栈指针寄存器值为内存最高地址,然后开始和结束都输出一次字符串和调用一次输出函数

20530

ARM(二).KEY and LED(1)

,即便声称为跨平台框架,现实情况,同样一套代码,不同平台与环境也不一定会获得相同效果 Note: 对于嵌入式来说,尤为如此,因为硬件配置不同,极大可能根本无法正常运行 这里使用如下平台与开发环境...灯 KEY电路原理图 LED电路原理图 创建项目 创建项目的总体过程就 新建文件夹 创建项目文件 项目中添加入源代码 只有以下几个方式稍微注意一下 选择三星 S3C2440A芯片 Device 选项卡确保正确设备选型...;不是关键词,只是一个标号,可以修改 ;关看门狗相关配置 LDR R0, =0x53000000 ;0x53000000看门狗定时器控制寄存器地址,LDR将这个地址加载到R0寄存器 LDR...R1, =0 ;LDR将0这个立即数,加载到R1寄存器 STR R1, [R0] ;STR将R1寄存器值(0)存到R0寄存器地址所指代寄存器,在这里,总体来讲就是关闭了看门狗...LDR R1, =0 ;LDR将0这个立即数,加载到R1寄存器 STR R1, [R0] ;STR将R1寄存器值(0)存到R0寄存器地址所指代寄存器,在这里,总体来讲就是将所有的

57320

聊聊程序分散加载启动奥秘

从内置SRAM启动:只能在0x2000 0000开始地址区访问SRAM。当从内置SRAM启动,应用程序初始化代码,必须使用NVIC异常表和偏移寄存器,从新映射向量表到SRAM。...和Data放置方式,比如download时候 两者把axf 解析成bin文件,然后烧录到nor flash,可以看到其实静态放置位置 关系不是很大,主要是执行时候 位置正确就行 ,因为Code中有绝对地址...~ 0x08013640 一个region表,记录着加载域或者执行域地址信息,从map文件也可以看到一些信息, 根据链接脚本信息,RW起始地址0x2000 0000, 前三个信息:RW 起始地址...可以看到R0、R1和R2 分别存放基地址、栈基地址(栈顶)和堆极限地址(与arm cc手册说一致。)...来看看armcc 手册上面怎么介绍堆栈初始化函数: __user_initial_stackheap 函数将栈基地址(栈顶)值放在r1,可以从上面寄存器看到,确实寄存器r1存放栈顶地址。

44520

arm汇编指令详解带实例_汇编buf指令

Privilege除了System模式外,其他5种为异常模式 各种模式切换,程序员通过代码切换,(CPSR寄存器);也可以CPU某些情况下自动切换(中断或者按复位键) 为什么要有这么多模式...后缀不能用于R15(PC)后面 当用于单个寄存器后面时,必须确性这个寄存器有隐性偏移量,eg:“STMDB SP!,{R3,R5,R7}”此时地址基址寄存器SP隐性偏移量4。...批量数据加载存储指令(LDM/STM与栈处理) 为什么需要多寄存器访问指令 ldr/str每周期只能访问4字节内存,如果需要批量读取、写入内存时太慢,解决方案stm/ldm stm/ldm..., {r0 – r6, pc}^ ^作用:目标寄存器中有pc时,会同时将spsr写入到cpsr,一般用于从异常模式返回。...# 做注释,一般放在行首,表示这一行都是注释不是代码。 :以冒号结尾标号。 . 点号gnu汇编中表示当前指令地址。 # 立即数前面要加#或 $,表示这是个立即数。

1.3K10

MIPS64乘法器模拟实验

测试乘数最低位是否为1,则给乘积加上被乘数,将结果写入乘积寄存器; 2.     被乘数寄存器左移1位; 3.     乘数寄存器右移一位; 4.    ...图4 然后开始乘法计算过程,如图5所示,测试乘数最低位是否为1,则给乘积加上被乘数,将结果写入乘积寄存器,否则跳到下一步,下一步被乘数寄存器左移1位,乘数寄存器右移一位,最后判断是否循环了32次,如果...第一种情况截图如图7所示: 图7 第二种情况截图如图8所示: 图8 根据上面的程序代码和截图,我们可以很清楚看出,当结果小于32位时,结果正常;当结果大于32位时,结果只截取了低32位结果,高...这里,我们来完善上述乘法器,使得该乘法器会在结果溢出时候提示。 其实,这个小优化十分简单,只需要对64位寄存器高32位进行检测即可。当高32位为0时,说明结果没有溢出,否则,结果溢出。...首先,我们看没有溢出情况结果,如图11所示: 图11 结果正确,其次,我们看溢出情况结果如何,如图12所示: 图12 可以看到,当结果溢出时,程序会给出提示“warning:result overflow

17920
领券