我得到的点MOV
,STA
和LDA
指示,但我不明白的是为什么有两种不同的工艺三种不同的指令?
STA
用于将数据从累加器复制到存储器位置,LDA
用于将数据从内存位置复制到累加器和MOV
用于在寄存器加寄存器和存储器之间复制数据.所以,我可以做什么STA
,LDA
指令也可以用MOV
指令完成,对吧?
在Z80,8080,8085和8086处理器的标志寄存器中,第1,3,5位的目的是什么,它们被记录为"保留"或"未定义"?
我试图向自己解释以下8085汇编代码
我有这个代码要求两个数字(来自IDE中的虚拟键盘)并在LED 7和8上显示它们:
.ORG 0000
CALL DATA
MOV C,A
CALL PRNT
CALL DATA
MOV E,A
CALL PRNT
MVI D,00H
MOV L,E
MVI H,00H
MOV A,C
DCR A
JUMP:
DAD D
DCR A
JNZ JUMP
MOV A,L
DAA
JMP IMPR
RET
DATA:
MVI A,00000000B
OUT 00H
IN 00H
RLC
RLC
RLC
RLC
ANI F0H
MOV B,A
MVI A,00000000B
OUT 00H
IN 00H
ANI 0FH
ORA B
RET
IMPR:
MOV B,A
ANI F0H
RLC
RLC
RLC
RLC
CALL NUMZ
OUT 06H
MOV …
Run Code Online (Sandbox Code Playgroud) 我知道可以通过进位标志增加两个大于给定处理器总线大小的无符号整数.通常,对于使用溢出标志的有符号整数也是如此.但是,Intel 8085只拥有一个Sign标志,而不是一个Overflow标志,那么它如何处理有符号整数运算呢?
在汇编语言,指令
MOV A B
Run Code Online (Sandbox Code Playgroud)
表示将B
(来源)的内容移动到A
(目的地).
我突然想出了指示
MOV D D
Run Code Online (Sandbox Code Playgroud)
这意味着什么?
我在实验手册中看到了这一点.截图:
我的问题是为什么在CALL指令的操作码获取中有6T状态,而在8085微处理器中有4个用于其他指令.我搜索了很多,但没有找到任何满意的答案.
这里:http://www.edaboard.com/thread201650.html它说它与CALL情况下使用的双寻址模式有关.但并没有真正解释为什么6T表示.
任何的想法?
编辑
当我开始知道CALL需要18个T状态时,就出现了这个问题.
根据我的计算,它应该是:4(对于操作码获取)+ 3 + 3(两个存储器读取以读取子程序地址)+ 3 + 3(对于堆栈上的两个存储器写入)= 16
因此,在搜索互联网时,我知道在CALL情况下操作码获取部分需要6T状态而不是4.
UPDATE
在阅读了评论并重新思考之后,我开始知道PUSH通常会将12个T状态作为指令.在CALL的情况下我们可以忽略PUSH的操作码获取部分,因为没有显式的PUSH指令,所以现在我们有8(12 - 4).所以,我觉得是因为堆栈指针的减少?因为即使在推送中它应该是6(3 + 3用于存储器写入),但在这里它是8(4 + 4).
我正在研究8085微处理器,发现它工作在3 Mhz上,例如需要4个时钟周期来进行操作码读取,3个时钟周期用于IO/M读取或写入.
那么现在,如果我以某种方式超频8085以10 Mhz工作,那么时钟周期的数量会减少吗?
或者循环次数保持不变但是3或4个完整循环的有效时间会减少?
在研究编程8085,8086和微进程器时,我们总是有十六进制表示.二进制数在计算机中很重要.但这些十六进制数字如何重要?有历史意义吗?
如果有人指出一些历史文章也会很好.
编辑:
计算机如何处理十六进制数?例如,当给出十六进制数作为输入时,8085会发生什么?
如果要检查的条件满足和不满足的情况,8085 中的任何跳转语句都需要哪些机器周期?
编辑:我知道号码。我想知道那些机器周期是什么。第一个是 Opcode Fetch,但其余的呢?
首先,我不了解现代CPU和操作系统。为此,我将针对intel 8085处理器进行解释。当然,我希望你想象有一个操作系统可以在intel 8085上运行。
我们有这样的汇编代码:
MVI A,16
MVI B,16
ADD B
HLT
Run Code Online (Sandbox Code Playgroud)
这段代码非常简单。当此代码运行时,它会执行以下操作: 将数字 16 加载到 intel 8085 处理器的寄存器 a 和 b 中。然后将这两个寄存器的值相加。
当然,当我们尝试在操作系统中运行这段代码时,很可能什么也不会发生。
我想问的是:如何在操作系统上运行不包含任何系统调用(或任何特定于操作系统)的代码(绕过操作系统)?我不希望操作系统在执行此操作时崩溃。
我已经读过,在8085,累加器是一个8位寄存器.那么下面的指令怎么样才是真的:
LDA address
Run Code Online (Sandbox Code Playgroud)
其中address是LH顺序的"16位"地址
如何在8位寄存器中插入16位地址?
我想找到一个我首先占用内存的数字的阶乘。(intel 8085)
编辑:我是初学者。我不知道如何编写它的汇编代码。
伪代码:
input n
fact = 1
loop:
..multiply fact by n
..decrement n
..test n
..jump if not zero to loop
output fact
Run Code Online (Sandbox Code Playgroud)