求解单片机汇编程序中的一条指令

看到某个单片机汇编程序中出现MOV C,40H 这条指令;求解,这指令怎么能通过呢?怎么能把一个字节的内容赋给位C呢?8位--->1位?(注:这条指令能通过编译,没出错)
我没有分了,各位高手帮下忙吧!!!!
怎么反汇编?还有我查了,位寻址区在20H到2FH,40H是处在字节寻址区的

楼主你好:

    首先我要说明的是如果没有特殊说明,仅凭40H是无法得知这是一个字节地址还是位地址的!对于字节编址来说,40H处在字节寻址区,不能进行位寻址,所以MOV C,40H.0 的用法是错误的。

    那么楼主可能有疑问了,什么时候40H是字节地址,什么时候又是位地址呢?

    其实很好判断:楼主看看如下两条指令:

MOV  C,20H

MOV  A,20H

这两条指令看似结构相同,其实是南辕北辙。如果操作数是“C”,那么其后面的20H表示位寻址区的20H(即以字节编址来看是24H的最低位);如果操作数是“A”,那么地址为字节编址的20H。汇编程序会根据操作数C或A自动做出判断20H是字节地址还是位地址。

    位寻址区的划分是这样的:可位寻址区的地址从20H~2FH共16个字节单元,那么这16字节单元一共有16*8=128个位地址,从20H的最低位到2FH的最高位,按顺序生成00H~7FH共128个位地址。如果加上SFR高端128个位地址,51机共有256个位地址。

    所以楼主写的的40H,实际是一个位地址,位于28H的最低位。写了这么多,希望楼主能看明白,呵呵!附一张对照表:

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-10-05
这里的40H其实是位地址,相当于40H.0,你反汇编一下就看出来了。或者你写两条:
MOV C,40H
MOV C,40H.0
然后看一下编译的结果,这两条指令是否是一样的
第2个回答  2010-10-05
这条指令中的40H不是一个8位的数,是一个寄存器的物理地址,具体的是哪个我一时想不起。

求解单片机汇编程序中的一条指令
MOV C,20H MOV A,20H 这两条指令看似结构相同,其实是南辕北辙。如果操作数是“C”,那么其后面的20H表示位寻址区的20H(即以字节编址来看是24H的最低位);如果操作数是“A”,那么地址为字节编址的20H。汇编程序会根据操作数C或A自动做出判断20H是字节地址还是位地址。位寻址区的划分是这样...

单片机汇编语言一个指令不明白
MOV A,DPH, 是可以的,因为A和DPH都是寄存器,可以相互传输的。该语句在查表程序经常用到,还有类似的还有:MOV DPH,A

【单片机 ,汇编】最基本的语法,求解释。关于16进制。
第一条指令 是LJMP START 为一条转移指令,转到用户主程序开始的地方,即START处。因为单片机地址是16位的二进制地址,用十六进制表示即是4位十六进制数 如0000H 和0100H 这里H表示十六进制数 0100H地址是用户主程序开始处 即START处。MOV SP,#70H;指令表示将立即数70H传送给SP寄存器,因为寄...

求单片机汇编程序执行后累加器A和PSW内容
第一:MOV A,#0FEH,这条指令执行后,累加器A的值为:FEH 第二:ADD A,#0FEH,续上条指令,该指令执行后,累加器A的值为:FCH 第三:MOV A,#09H,该指令执行后,累加器A的值为:09H 第四:MOV PSW,#0,该指令不影响累加器A的值 第五:subb a,#0A4H,执行该指令后,累计爱器A的值...

MOVC是什么指令?
1. MOVC指令是51单片机汇编语言中的一种特殊指令,用于查表操作。2. 在MCS-51指令集中,MOVC指令通过两条指令实现查表功能:MOVC A,@A+PC和MOVC A,@A+DPTR。3. 查表指令的具体细节涉及到累加器A与程序存储器之间的数据传输,这在汇编语言编程中非常重要。4. MOVC指令的作用是将程序存储器中的...

一段单片机汇编程序看不懂,哪位能帮忙分析下,谢谢!
RESET: AJMP MAIN ;指令内容是转到MAIN的程序去工作。地址是0000H ORG 000BH ;声明指向T0的中断入口的地址 AJMP IT0P ;这时的指令内容是转到IT0P的程序(T0中断处理程序)去工作。地址是000BH ORG 0100H ;声明现在的是地址0100H,之前没用到的保留。编译器认为是内容是00H MAIN: MOV SP,#60H ;...

stc89c52单片机 汇编程序问题
MOVX @DPTR, A 。 MOVX 是片外ROM传送指令,DPTR是16位指针,你那应该用r0或r1,DEL2: MOV R0, #100 DJNZ R0, $ 这有问题 后面键3.5那看不明白,那么乱,在KELL调试那调试看看吧

单片机汇编DA指令什么用
单片机汇编言语DA指令,是指十进制加法运算。是结合加法指令一起用的,例如DAA,这条指令是十进制调整指令,用来在进行十进制运算(BCD码)时进行校正的。当两个BCD码加法时,01H+09H应该是等于10H,但由于 单片机的加法指令是二进制的运算,加完之后得到的结果是0AH,这时就需要再加上一个06H。

单片机的汇编程序,我画问号的那一条语句中的$是什么意思?
单片机的汇编程序,在转移指令中有时用符号$,表示转移指令在本行循环的。DJNZ R5,是R5不为0还转到本行循环 可以改成 WAIT: DJNZ R5, WAIT 与这种写法的指令是完全相同的,但用$表示指令简单了。请及时采纳

求解单片机程序的每一步的意思,谢谢?
程序这么长,不一一解释,要想弄明白,还要学汇编,弄清51单片机内部结构和指令 ORG 0000H;从0地址开始 AJMP MAIN;跳转至主程序,为了躲开中断入口地址 MAIN: 主程序 CLR A;清累加器A MOV P2,#0FFH;没啥用,P2上电就 是0FFH JNB P1.0,LOOP1 判断P1.0状态 是0转LOOP1,不为0顺序执...

相似回答