51 匯編語(yǔ)言編程:求最大、最小值的乘積
;求 MCS51 內(nèi)部RAM 的 40H~4FH 中 16 個(gè)數(shù)據(jù)中最大值和最小值的積。
;其中最大值和最小值分別放到 50H 和 51H 中,積的低位和高位分別放到 52H 和 53H 中。
;求最大、最小值,再相乘,做而論道編寫(xiě)出來(lái)了程序,將在后面列出。
;為了進(jìn)行驗(yàn)證,提問(wèn)者需要準(zhǔn)備 16 個(gè)數(shù)據(jù),然后再執(zhí)行做而論道編寫(xiě)的程序。
;那么,綜合到一起的程序如下:
ORG 0000H
;---------------------下面是在 40H~4F 中,隨意寫(xiě) 16 個(gè)數(shù)據(jù)
MOV 40H, #5
MOV 41H, #32
MOV 42H, #34
MOV 43H, #67
MOV 44H, #125
MOV 45H, #52
MOV 46H, #18
MOV 47H, #53
MOV 48H, #244
MOV 49H, #27
MOV 4AH, #43
MOV 4BH, #93
MOV 4CH, #12
MOV 4DH, #3
MOV 4EH, #166
MOV 4FH, #42
;---------------------下面就是做而論道編寫(xiě)的求最大、最小值相乘的程序
MOV 50H, #0 ;先用0當(dāng)做最大值
MOV 51H, #255 ;用255當(dāng)做最小值
MOV R0, #40H ;起始地址
LOP:
MOV A, @R0 ;取來(lái)一個(gè)字節(jié)
CJNE A, 50H, $ + 3 ;和最大值相比較
JC N1 ;小于就轉(zhuǎn)移
MOV 50H, A ;大于就保存
N1: ;下面處理最小值
CJNE A, 51H, $ + 3
JNC NEXT
MOV 51H, A
NEXT:
INC R0
CJNE R0, #50H, LOP ;不到 50H 轉(zhuǎn)移,最后的地址是 4FH
MOV A, 50H
MOV B, 51H
MUL AB ;最大、最小相乘
MOV 52H, A
MOV 53H, B ;保存積
SJMP $ ;停止
END
經(jīng)過(guò)單步執(zhí)行,可以看到一次一次的比較、保存,最大值是 F4H(即 244),最小值是 03H。
在 52H、53H 中出現(xiàn)的是 DCH 和 02H。02DCH 即 732,這就是 244 * 3 的積。