汇编语言用RRC指令编写16位寄存器除8指令

如题所述

除8相当于右移三次就实现了,程序如下:
假设除数保存在30H31H,高位在前。
DIV8:
MOV R2,#3

LOOP:
CLR C

MOV A,30H

RRC A ;高位中的D0移到C

MOV 30H,A

MOV A,31H

RRC A ;C移到低位中的D7

MOV A,31H

DJNZ R2,LOOP ;移位三次

RET
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-13
RRC指令,是MCS-51单片机的指令。
----
假设,16位寄存器:R2 R3,其中R2是高八位。
右移三次,即除以8。
;
MOV R4, #3
LOOP:
CLR C
MOV A, R2
RRC A ;R2内容右移一位
MOV R2, A

MOV A, R3
RRC A ;R3内容右移一位
MOV R3, A

DJNZ R4, LOOP ;循环三次

SJMP $

END追问

那CY位呢为0或为1呢?有什么区别
为什么不是用RC

追答

1.右移三次,左边应该填写三个零,所以Cy应该是零。
2.RC? RC是什么东西?

追问

RR

追答

RR 指令不涉及到Cy,所以不可用。

本回答被提问者采纳
第2个回答  2012-05-13
mov a,3h
mov temp,a 移动3次方

循环:
clr c 清楚C标志
RRC 寄存器
sdz temp 递减TEMP=0跳出
jmp 循环:
end追问

能再简单点吗?还是看不懂...

追答

右移寄存器作为除法只能是除以2的倍数(次方)
你说的是除以8所以是2的3次方=8
那么首先确定右移次数
右移的寄存器我虚拟为 data1 (16位的寄存器)

mov a,3h
mov temp,a 把3写入TEMP
CLR C 清楚C标志
RRC DATA1 带标志右移
SDZ TEMP 递减TEMP =0跳过下一条
JMP $-3 程序后退3条执行
END 结束
看来你不清楚RRC的意思
(前提必须是可以除断8的)否则结果会出现错误
假设寄存器的数据位 1024
2进制数据 0001 0000 0010 0100
清楚标志位 C=0
RRC 0000 1000 0001 0010 1次
0000 0100 0000 1001 2次
0000 0010 0000 0100 3次
16进制= 0204
这样说你还不明白我就没办法了

第3个回答  2012-05-20
MOV AX,DATA
MOV CH,03H
RRC AX,CH
相似回答