为什么我们不能将数据直接从内存位置移动到另一个内存位置.
请原谅我,如果我问一个愚蠢的问题,但我认为这是一个真实的情况,至少对于我遇到的问题(8085,8086 n 80386)
我并不是在寻找一种移动数据的解决方案(例如,使用movs n all),但实际上是这种异常的原因.
我有兴趣编写像gameboy和其他手持控制台这样的模拟器,但我读到的第一步是模拟指令集.我发现这里有一个链接说初学者模仿Commodore 64 8位微处理器,事情是我不知道有关模拟指令集的事情.我知道mips指令集,所以我认为我可以管理理解其他指令集,但问题在于它是什么意思通过模拟它们?
注意:如果有人可以为我提供初学者指令集仿真的分步指南,我将非常感激.
注意#2:我打算用C写.
注意#3:这是我第一次尝试学习整个仿真的东西.
谢谢
编辑:我发现这个网站是一个详细的分步指南,编写一个看起来很有希望的模拟器.我将开始阅读它,并希望它也能帮助那些正在研究模拟器的人.
我正在努力完全理解时钟周期是什么,所以我想出了一个测试示例,我希望有人确认或驱散并提供更好的理解.如果我有一个简单的代码行,一个while循环,在设备上运行
while(true)
{
int x = 5;
}
Run Code Online (Sandbox Code Playgroud)
命令:int x = 5是否每个时钟周期执行一次?换句话说,时钟速度是指设备能够在每单位时间内读取和执行命令的速度吗?
在汇编语言,指令
MOV A B
Run Code Online (Sandbox Code Playgroud)
表示将B(来源)的内容移动到A(目的地).
我突然想出了指示
MOV D D
Run Code Online (Sandbox Code Playgroud)
这意味着什么?
我在实验手册中看到了这一点.截图:
正如问题所述,我想知道控制器是否可以同时检测两个按钮按下.
我是控制器编程的新手,从基础知识开始 - 闪烁的LED,然后移动到按钮,现在尝试按下按钮.当两个按钮被按在一起时,我想设置一些标志.
但据我所知,在这种情况下只会调用一个ISR,从而检测到一次按下.我们怎样才能做到这一点......
(在某些电子设备中,当我们按下某些按钮时它具有特定的功能,例如当同时按下3个适当的按钮时重置电话)
梅西
我想在嵌入式应用程序中运行 sqlite。能够运行 sqlite 来维护数据库的最低要求是什么?我正在考虑实现 R*tree 进行空间搜索。如果我能得到证明这些要求合理的解释,那将会很有帮助。
具有大约 32kb 内存的 Cortex M0/Cortex M3 是否足够?我需要多少闪存?
我正在考虑将数据库本身存储在 SD 卡上。
我尝试编写一个汇编代码,确定28是否是一个完整的数字.但我有一个问题.当我运行代码时,emu8086无法识别我的标签.
例如,在此代码中:
mov dl,1ch
mov bl,00h ;sum
mov cl,1ch ;counter
dec cl
HERE : mov ax,00h
mov al,dl
div cl ;ax/dl ah=remainder
cmp ah,00h
je SUM ; if ah=0 jump the label SUM
loop HERE
mov dh,00h
cmp dl,bl
je PERFECT
hlt
SUM :
add bl,cl
jmp HERE
PERFECT :
mov dh,01
hlt
Run Code Online (Sandbox Code Playgroud)
当loop HERE指令运行时,emu8086运行mov dl,1ch我的代码的第一条指令().我能做什么?问题是什么?
提前致谢...
我试图在 verilog 中制作一个简单的微处理器,作为同时理解 verilog 和汇编的一种方式。
我不确定我是否很好地实现了我对微处理器的看法,或者我是否完全错了。我应该简化微处理器的想法,还是应该像使用真正的芯片一样对其进行编程。例如,我是否应该定义一个名为 address 的变量并创建一个大case语句,该语句接受汇编命令并对内存和地址进行处理。到目前为止,我已经做了类似的事情。
case (CMD_op)
//NOP
4'b0000: nxt_addr = addr + 4'b0001 ;
//ADD
4'b0001: begin
op3_r = op1_r + op2_r;
nxt_addr = addr + 4'b0001;
end
Run Code Online (Sandbox Code Playgroud)
CMD_op 是一个 4 位输入,它指的是我在上面添加的 case 语句中的一组预定义的 16 个命令,这只是前两种情况,我为每个命令以及它如何篡改地址做了一个 case。我有一个 16 位 x 16 位的数组来保存主程序。每行的前 4 位指的是汇编命令,接下来的 12 位指的是命令的参数。
例如这里是无条件跳转命令 JMP
//JMP
4'b0101: nxt_addr = op1_r ;
Run Code Online (Sandbox Code Playgroud)
这4'b0101是命令的 case 语句中的一个 case。
我问这个问题的原因是因为我觉得我在模拟一个微处理器而不是制造一个微处理器,我觉得我只是在模拟特定的汇编命令会对微处理器内部的内部寄存器做些什么。我没有公共汽车,但是如果我可以使用 Verilog 跳过它的使用,公共汽车会做什么。
感觉少了点什么,谢谢。
我无法理解“待处理中断”这个词。我的意思是,我看到异步事件的方式就像“时间、潮汐和中断”不等待。
那么这个待处理中断是什么呢?我怎样才能满足一个已经过去但已经消失的请求。
有人可以用一个使用场景来解释一下吗?
编辑:从定义上来说,它是可以理解的(英语意义上),但是如果我应该处理之前发生的中断,我是否正在查看硬件设备上的一些数据缓冲?
如果在变址寻址模式下执行加法的结果大于 ,会发生什么情况0xFFFF?需要明确的是,我指的不是从低字节到高字节的进位,而是指从高字节的进位。
例如,对于使用绝对 X 索引寻址的指令,0xFFAA当 x 索引寄存器包含 时,使用操作数调用它会产生什么结果0xFF?这会溢出到吗0x00AA?结果会0x100A9被截断为吗0x00A9?处理器会冻结吗?
由于某种原因,任何地方都没有这方面的信息。这一点在 MOS 的 650X 系列官方编程指南中似乎并未提及。