我正在用汇编语言在atmega328p上设计一个计算器,在完成计算后,我需要将结果分离成数字,并在LED矩阵上显示。到目前为止,我写了一个代码,用一个8位数字来完成这一工作(一个寄存器)并且工作正常。但是,当我开始使用两个寄存器来处理数字的高位和低位部分时,我无法给出一个执行相同操作的代码。
用于处理8位数代码附在下面:
ldi r19, 0
HUNDS:
cpi resL, 100 ;compare low part of the result register with 100
brlo TENS
subi resL, 100
inc r19
rjmp HUNDS
TENS:
st x+, r19 ;store hundreds counter in buffer for screen display (will be displayed on first screen block)
ldi r19, 0 ;reset counter for tens
TENS_Test:
cpi resL, 10
brlo UNITS
subi resL ,10
inc r19
rjmp TENS_Test
UNITS:
st x+, r19 ; store tens counter
st x+, resL ; store units digit
1条答案
按热度按时间sd2nnvve1#
如果您希望遵循您方法,则有一个循环如下所示
但这不是一个好方法。更好的方法是使用除以10,并以相反的顺序保存余数。您不需要重新设计除法例程。您可以在Atmel应用说明AVR200中找到它:乘法和除法例程。
description is here
source is here