我刚刚爱上了这个特殊的微控制器,68hc11有一个惊人的架构。
我不是专家,但我想改进,组装有点困难,但我想编程这个微控制器。
此程序集代码将从$100开始执行,将在$800处分配一个200字节的数组,并使用值200、199、…初始化该数组。1. (降序)。
Vreset equ $FFFE
RAM equ $800
ROM equ $100
ARRAY_SIZE equ 200
org RAM
array rmb ARRAY_SIZE
org ROM
Start ldx #array
ldaa #ARRAY_SIZE
Loop staa ,x
inx
deca
bne Loop
bra *
org Vreset
dw Start我想从一个给定的数组中得到两个最高的值。我的意思是,我想要创建一个数组,给出10个值(存储在一个数组中),最后获得两个最高的值:
示例:
数组可能包含以下值:
5 7 9 96 57 58 1 5 6 9我想获得以下成果:
96 58能帮我做这个吗?我有点迷路了
发布于 2020-06-07 20:33:58
68HC11是一种经典的MCU架构,在许多大学中(在某种程度上可能仍然是如此)。
从官方意义上说,这是终身制。但是,由于势头的影响,许多人仍然在积极地使用它,要么是通过在FPGA中加载的IP等价物,要么是来自Tekmos等公司的克隆。
若要创建数组,请使用与您显示的代码类似的代码。我的示例在ROM中使用常量数组。
至于你的问题,找到两个最高的价值,有许多可能的解决办法。这里有一个可以让你开始:
Vreset equ $FFFE
ROM equ $100
org ROM
array fcb 5,7,9,96,57,58,1,5,6,9
;ARRAY_SIZE equ *-array
Start ldx #array ;X -> array
ldaa ,x ;let A keep the 1st maximum (assume 1st element)
clrb ;let B keep the 2nd maximum (assume zero)
Loop inx ;X -> next array element
cpx #array+::array ;(ASM11 idiom, ::array = 10 i.e., number of elements)
; cpx #array+ARRAY_SIZE ;(alternative for most assemblers)
bhs Done ;if past the array end, done
cmpa ,x ;compare with current array element
bhi DoB ;if already 1st maximum, skip
tab ;update 2nd maximum with previous 1st
ldaa ,x ;else A = new maximum
bra Cont
; bra Loop ;(optimization of previous line)
DoB cmpb ,x
bhi Cont ;if already 2nd maximum, skip
; bhi Loop ;(optimization of previous line)
ldab ,x ;else B = new maximum <= A
Cont bra Loop ;repeat for all array elements
Done bra * ;A = 1st maximum, B = 2nd maximum <= A
org Vreset
dw Starthttps://stackoverflow.com/questions/62238168
复制相似问题