• 03_汇编语言(n个数找最大值)


    程序要求:

      先输入一个数n(0<n<=100),再输入n个无符号数K(0<=K<=65535),找出这n个数的最大值并输出

      测试实例保证输入每个数之后,都会以回车结束

    代码:

     1 ;程序要求:先输入一个数n(0<n<=100),再输入n个无符号数K(0<=K<=65535),找出这n个数的最大值并输出
     2 ;实例保证输入的每个数都以回车结束
     3 
     4 STACK SEGMENT STACK 'STACK'
     5     STAK DW 256 DUP(?)
     6 STACK ENDS
     7 
     8 DATA SEGMENT
     9     MAX_NUM DW ?
    10 DATA ENDS
    11 
    12 CODE SEGMENT
    13     ASSUME CS:CODE,DS:DATA,SS:STACK
    14 MAIN PROC
    15 START:  MOV AX,DATA
    16         MOV DS,AX
    17         CALL INPUT
    18         MOV CX,BX ;循环次数为BX,赋值给CX
    19         XOR AX,AX  ;AX置0,保存最大值
    20 NEXT_L: CALL INPUT
    21         CMP AX,BX
    22         JA JUMP
    23         MOV AX,BX
    24 JUMP:   LOOP NEXT_L
    25         MOV MAX_NUM,AX
    26         MOV BX,MAX_NUM
    27         CALL OUTPUT
    28         MOV AH,4CH
    29         INT 21H
    30 MAIN ENDP
    31 
    32 INPUT PROC  ;入口参数:无     出口参数:BX(因此不能超过65535)
    33         PUSH AX
    34         PUSH CX
    35         PUSH DX
    36         PUSH SI  ;保存乘数
    37         XOR BX,BX
    38         XOR CX,CX
    39         XOR DX,DX
    40         MOV SI,10
    41 NEXT:   MOV AH,01
    42         INT 21H        ;接收键盘的数字
    43         CMP AL,0DH    ;判断是否是回车
    44         JZ DONE     ;JZ:等于则跳转
    45         CMP AL,'0'
    46         JB ERROR1    ;JB:小于则跳转
    47         CMP AL,'9'
    48         JA ERROR1    ;JA:大于则跳转
    49         SUB AL,30H    ;将ASCII码字符变为对应的数字
    50         MOV CL,AL
    51         MOV AX,BX
    52         MUL SI
    53         ADD AX,CX
    54         MOV BX,AX
    55         JMP NEXT     ;继续接收下一个数据
    56 ERROR1: MOV BX,0FFFFH
    57         JMP EXIT
    58 DONE:   MOV DL,0AH
    59         MOV AH,02
    60         INT 21H        ;输出回车
    61         MOV DL,0DH
    62         MOV AH,02
    63         INT 21H
    64 EXIT:   POP SI
    65         POP DX
    66         POP CX
    67         POP AX
    68         RET        ;子程序返回
    69 INPUT ENDP
    70 
    71 OUTPUT PROC NEAR ;入口参数:BX       出口参数:无
    72         PUSH AX        ;保护寄存器
    73         PUSH BX
    74         PUSH CX
    75         PUSH DX
    76         PUSH SI
    77         MOV SI,10    ;SI中是除数
    78         XOR CX,CX
    79         MOV AX,BX    ;入口参数在BX中
    80 NEXT1:  MOV DX,0    ;DX存放余数,清零
    81         DIV SI        ;AX和DX组成的32位除以16位的SI,商保存在AX中,余数保存在DX中
    82         PUSH DX
    83         INC CX        ;CX++,CX记录有多少位
    84         CMP AX,0
    85         JNZ NEXT1    ;JNZ 不等于则跳转
    86 OUTP:   POP DX        ;余数出栈
    87         ADD DL,30H
    88         MOV AH,2
    89         INT 21H
    90         LOOP    OUTP
    91         POP SI        ;恢复寄存器
    92         POP DX
    93         POP CX
    94         POP BX
    95         POP AX
    96         RET        ;子程序返回
    97 OUTPUT ENDP
    98 CODE ENDS
    99 END START
  • 相关阅读:
    一小时学会前端工程化
    lodash学习资料
    关于《冬天时我喜欢靠近温暖的事》这首歌 (民谣在路上)
    往后余生(简单的歌词分享)
    如果觉得活的很累不妨进来看看(生活应该简简单单)
    《大学》全文及白话翻译
    原型设计模式 Prototype
    解释器模式 Interpreter
    copy on write,代理模式
    ado.net
  • 原文地址:https://www.cnblogs.com/ruo-yu/p/4445476.html
Copyright © 2020-2023  润新知