汇编的ADD指令

我想用ADD指令 没按下去P1.3 让R寄存器+1

为你解答: 你使用哪个寄存器啊? 就替你选择使用R5寄存器吧 另外寄存器加1功能
的实现的 最好使用现成的单片机本身就有的加1指令 INC R5;就可以实现寄存器R5的加1 ;如果使用 ADD指令 一条完成不了 ADD指令必须以累加器A做为目的操作数 需要用到
MOV A,R5 ;
ADD A,#1 ;
MOV R5,A
三条指令才能实现来 指令代码长 执行速度慢.
你的要求是每次按下 P1.3 寄存器内容加1 对吧
参考程序如下:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R5,#0 ; 寄存器清零
SETB P1.3 ; 置P1.3口线为读状态
LL: JB P1.3, LL ; 等待P1.3键按下
LCALL YS ; 延时去键盘 抖动
SETB P1.3 ; 置P1.3口线为读状态
JB P1.3, LL ; 判断P1.3键按下否? 如果没有按下 转LL继续 等待P1.3键按下
INC R5 ;如果按下P1.3键 则入寄存器R5加1
SJMP LL ;循环继续等待P1.3键按下

YS: MOV R7,#15 ;延时子程序
YY: MOV R6,#200
SS; DJNZ R6, SS
DJNZ R7,YY
RET

END

哈哈 帮你做完了 没有加分没关系 请替俺选择(满意回答)就可以
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-15
add eax, dword ptr [ebp+10]这个是最快的,add eax, ecx这个是最慢的;add eax, dword ptr [ebp+10]是在添加指针,指针在汇编里就相当于汇编指令;add eax, ecx 是在添加一个变量
所以在汇编语言中指令一定是比立即数和变量运行速度快的,则立即数又比变量运行快。
希望对你有所帮助!!!
第2个回答  2015-06-26
为你解答: 你使用哪个寄存器啊? 就替你选择使用R5寄存器吧 另外寄存器加1功能
的实现的 最好使用现成的单片机本身就有的加1指令 INC R5;就可以实现寄存器R5的加1 ;如果使用 ADD指令 一条完成不了 ADD指令必须以累加器A做为目的操作数 需要用到
MOV A,R5 ;
ADD A,#1 ;
MOV R5,A
三条指令才能实现来 指令代码长 执行速度慢.
你的要求是每次按下 P1.3 寄存器内容加1 对吧
参考程序如下:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R5,#0 ; 寄存器清零
SETB P1.3 ; 置P1.3口线为读状态
LL: JB P1.3, LL ; 等待P1.3键按下
LCALL YS ; 延时去键盘 抖动
SETB P1.3 ; 置P1.3口线为读状态
JB P1.3, LL ; 判断P1.3键按下否? 如果没有按下 转LL继续 等待P1.3键按下
INC R5 ;如果按下P1.3键 则入寄存器R5加1
SJMP LL ;循环继续等待P1.3键按下

YS: MOV R7,#15 ;延时子程序
YY: MOV R6,#200
SS; DJNZ R6, SS
DJNZ R7,YY
RET
第3个回答  2012-06-15
指令的执行过程包括取指令,执行指令。
取指令指的是从CS:IP处取得指令放入指令队列;执行指令指译码、具体操作。

add eax, 12 ;立即数
最快;因为操作数在指令中。直接在加法器中运算

add eax, ecx
次之。因为操作数在寄存器。从寄存器取数比从指令中慢

add eax, dword ptr [ebp+10]
最慢。因为操作数在存储器。从存储器取数,需要额外的一个读写周期
相似回答