51 汇编语言编程:求最大、最小值的乘积

来源:互联网 发布:python 多行命令 编辑:程序博客网 时间:2024/05/22 04:29

;求 MCS51 内部RAM 的 40H~4FH 中 16 个数据中最大值和最小值的积。

;其中最大值和最小值分别放到 50H 和 51H 中,积的低位和高位分别放到 52H 和 53H 中。


;题目链接:http://zhidao.baidu.com/question/518773968291621045.html


;求最大、最小值,再相乘,做而论道编写出来了程序,将在后面列出。


;为了进行验证,提问者需要准备 16 个数据,然后再执行做而论道编写的程序。


;那么,综合到一起的程序如下:


    ORG   0000H

;---------------------下面是在 40H~4F 中,随意写 16 个数据

    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


;---------------------下面就是做而论道编写的求最大、最小值相乘的程序


    MOV   50H, #0       ;先用0当做最大值

    MOV   51H, #255     ;用255当做最小值

    MOV   R0, #40H      ;起始地址

LOP:

    MOV   A, @R0        ;取来一个字节

    CJNE  A, 50H, $ + 3 ;和最大值相比较

    JC    N1            ;小于就转移

    MOV   50H, A        ;大于就保存

N1:                     ;下面处理最小值

    CJNE  A, 51H, $ + 3 

    JNC   NEXT

    MOV   51H, A

NEXT:

    INC   R0

    CJNE  R0, #50H, LOP ;不到 50H 转移,最后的地址是 4FH


    MOV   A, 50H

    MOV   B, 51H

    MUL   AB            ;最大、最小相乘

    MOV   52H, A

    MOV   53H, B        ;保存积


SJMP  $                 ;停止


END


经过单步执行,可以看到一次一次的比较、保存,最大值是 F4H(即 244),最小值是 03H。


在 52H、53H 中出现的是 DCH 和 02H。02DCH 即 732,这就是 244 * 3 的积。


提问者评价:谢谢!


0 0