1寄存器寻址和直接寻址指令的表现形式不同。在上面所举的例子中,我们可以看出ACC和A,A、B和AB对,DPH、DPL和DPTR,CY和C等,书写形式相似但不相同,各组所对应的都是同一个存储单元,但在指令中前面的是直接寻址,后面的是寄存器寻址。
2寄存器寻址和直接寻址指令的汇编代码不同。采用寄存器寻址和直接寻址对某1个存储单元(该存储单元既可以进行寄存器寻址也可以进行直接寻址)进行寻址时,不同的寻址方式,对应的汇编代码也不同,这是两种寻址方式的本质区别。
采用直接寻址指令寻找特殊功能寄存器字节单元或位单元时,汇编后操作数的直接地址占用汇编代码的一个字节。
例如:指令M0V ACC,30H的汇编代码为85H、30H、0E0H;
指令MOV B,30H的汇编代码为85H、30H、0F0H;指令M0V DPL,30H的汇编代码为85H、30H、82H;指令MOV DPH,30H的汇编代码为85H、30H,83H;指令JBCY,30H的汇编代码为20H、0D7H、30H;上述指令中对源操作数和目的操作数均采用了直接寻址方式,汇编代码共三个字节:第一个字节为指令类型;第二个字节为源操作数地址;第三个字节为目的操作数的地址。采用寄存器寻址指令寻址特殊功能寄存器某个字节单元或位单元时,汇编后的寄存器操作数与指令助记符被汇编成一个字节的汇编代码。
例如:指令M0V A,30H的汇编代码为0E5H、30H;指令M0V DPTR,#4000H的汇编代码为90H、4000H;指令M0V C,30H的汇编代码为0A2H、30H;上述指令中对目的操作数均采用了寄存器寻址。汇编代码的字节中包含了指令功能和寻址操作数所用的寄存器两个方面的信息。
简单的举个例子你看一下吧!比如说MOV A,30H就是直接寻址他相当与MOV A,P1
他们是直接将寄存器得内容送入累加器,而不经过寄存器,(R0,R1,R2,R3,R4,R5,R6,R7,)比如说MOV A,R0这就是寄存器寻址,而MOV P0,A
是直接将累加器的内容通过P0口送出。
累加器写成A或ACC在51汇编语言指令中是有区别的。
ACC在汇编后的机器码必有一个字节的操作数,即累加器的字节地址E0H,A在汇编后则隐含在指令操作码中。所以在指令中A不能用ACC来替代,而对A的特殊功能寄存器直接寻址和累加器某一位的寻址要用ACC,而不能写成A。
A和ACC都表示累加器,但A是累加器的代号,在指令中默认是无地址的,而ACC是累加器在指令中的直接地址(E0H),可出现在用直接寻址的任何地方。
一般的说法:A表示了累加器中的内容【寄存器寻址】;ACC表示了累加器的地址【直接寻址】。
第一个
址加变址寻址
mov
cx,[table+6]
第二个
寄存器间接寻址
操作数在存储器中,操作数的有效地址在si,di,bx,bp这4个寄存器之一中。在不采用段前缀的情况下,
对于di,si,bx默认段为ds,而bp为ss。
mov
cx,[bx]
第三个
寄存器相对寻址
操作数在存储器中,操作数的有效地址是一个基址寄存器(bx,bp)或变址寄存器(si,di)的内容加上8位或16位的位移之和。在指令中的8位和16位的常量采用补码表示,8位要被带符号扩展为16位
mov
cx,[bx+6];
太久没碰汇编了
希望对你能有所帮助