C51彙編求最大值
阿新 • • 發佈:2021-07-01
題目描述:
設在DAT開始的片內RAM中存放8個無符號位元組數,求最大值,並將最大值存放在A中
輸入資料:
55H,7BH,45H,80H,0F5H,0CH,23H,7BH
最大值為:0F5H,所以A中應該儲存0F5H
演算法思想:
直接使用冒泡法即可,比較大小用減法和Cy來實現跳轉
原始碼:
ORG 0000H LJMP INIT ORG 0100H INIT: ;初始化,向60H開始的RAM裡面存資料,存8個 MOV R0,#60H MOV @R0,#55H INC R0 MOV @R0,#7BH INC R0 MOV @R0,#45H INC R0 MOV @R0,#80H INC R0 MOV @R0,#0F5H INC R0 MOV @R0,#0CH INC R0 MOV @R0,#23H INC R0 MOV @R0,#7BH INIT2: ;迴圈初始化部分,A用來儲存最大值,R0暫存器用來訪問RAM儲存器CLR A MOV R0,#60H MOV R2,#8H MOV R3,#0H CLR C MAX: MOV R3,A ;提前儲存A的值 SUBB A,@R0 ;用減法和Cy來判斷A和@R0的大小關係,C=0則A大(因為A-@R0夠減,無需借位)
XCH A,R3 JNC TT MOV A,@R0 ;ELSE @R0大 TT: CLR C INC R0 DJNZ R2,MAX SJMP $ END
除錯結果:
RAM儲存器:
暫存器區:
暫存器也在RAM上(高128B,80H~0FFH)
C=0則A大(因為A-@R0夠減