68hc11 组装(第一步)- 排序
68hc11 assembly (first steps) - sorting
我刚刚爱上了这个特别的微控制器,68hc11 有一个惊人的架构。
我不是专家,但我想改进,组装有点难,但我想给这个微控制器编程。
此汇编代码将从 $100 开始执行,将在 $800 处分配一个 200 字节的数组,并使用值 200、199、... 1 初始化该数组。(降序)。
Vreset equ $FFFE
RAM equ 0
ROM equ 0
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
I want to get the two highest values from a given array.. i mean, i
want to create an array, give 10 values (stored inside an array) and
finally obtain the two highest values:
示例:
数组可能包含这些值:
5 7 9 96 57 58 1 5 6 9
我想获得这个输出:
96 58
可以帮我做这个吗?我有点迷路了:/
68HC11 是一种经典的 MCU 架构,曾经(在某种程度上可能仍然)在许多大学教授。
正式来说,它已经停产了。但是,由于势头强劲,许多人仍在积极使用它,要么通过加载到 FPGA 中的 IP 等价物,要么通过 Tekmos 等公司的克隆。
要创建数组,请使用与您展示的类似的代码。我的示例在 ROM 中使用常量数组。
关于您找到两个最高值的问题,有很多可能的解决方案。这只是一个帮助您入门的方法:
Vreset equ $FFFE
ROM equ 0
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 Start
我刚刚爱上了这个特别的微控制器,68hc11 有一个惊人的架构。
我不是专家,但我想改进,组装有点难,但我想给这个微控制器编程。
此汇编代码将从 $100 开始执行,将在 $800 处分配一个 200 字节的数组,并使用值 200、199、... 1 初始化该数组。(降序)。
Vreset equ $FFFE
RAM equ 0
ROM equ 0
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
I want to get the two highest values from a given array.. i mean, i want to create an array, give 10 values (stored inside an array) and finally obtain the two highest values:
示例:
数组可能包含这些值:
5 7 9 96 57 58 1 5 6 9
我想获得这个输出:
96 58
可以帮我做这个吗?我有点迷路了:/
68HC11 是一种经典的 MCU 架构,曾经(在某种程度上可能仍然)在许多大学教授。
正式来说,它已经停产了。但是,由于势头强劲,许多人仍在积极使用它,要么通过加载到 FPGA 中的 IP 等价物,要么通过 Tekmos 等公司的克隆。
要创建数组,请使用与您展示的类似的代码。我的示例在 ROM 中使用常量数组。
关于您找到两个最高值的问题,有很多可能的解决方案。这只是一个帮助您入门的方法:
Vreset equ $FFFE
ROM equ 0
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 Start