汇编(循环、分支、子程序)实验报告
汇编语言-实验二 循环与子程序程序设计

汇编语言-实验二循环与子程序程序设计
实验目的
本实验旨在通过学习循环和子程序的概念和使用方法,掌握汇
编语言中循环和子程序的程序设计技巧,培养学生的程序设计能力。
实验内容
1. 循环程序设计:编写一个循环程序,实现指定次数的循环操作。
2. 子程序程序设计:编写一个子程序,实现指定功能的模块化
程序设计。
实验步骤
循环程序设计
1. 根据实验要求确定需要循环的次数。
2. 初始化循环计数器,将循环计数器置为0。
3. 判断循环计数器是否达到循环次数的要求,如果达到则跳出
循环,否则继续执行循环体。
4. 执行循环体的操作。
5. 循环计数器自增1。
6. 返回到第3步继续判断循环条件。
子程序程序设计
1. 根据实验要求确定需要实现的功能。
2. 将要实现的功能封装在一个子程序中,确定输入参数和输出结果。
3. 在主程序中调用子程序完成指定的功能。
4. 如果需要,可以在子程序中调用其他子程序实现更复杂的功能。
实验
本次实验通过编写循环和子程序的程序设计,加深了对汇编语言中循环和子程序的理解。
循环程序设计能够实现重复执行指定次数的操作,提高了程序的效率;子程序程序设计能够实现模块化和可重用性,提高了程序的可读性和可维护性。
通过实践,进一步掌握了汇编语言的程序设计技巧,加深了对汇编语言的理解和应用能力。
参考资料
汇编语言程序设计教程
汇编语言程序设计实验指导书。
实验3 循环与子程序汇编语言程序设计实验

六、执行到 5!,r2=1!+2!+3!+4!+5!=153=0x99
汇编程序代码:
4、 选做:利用 1 题中找最大数的方法,对内存中 19、21、4、33、51、16、72、28、39,2 的 10 个数据进行选择法升序排序。
5、 选做:用递归调用方法求 n!,n=6。 一、调试状态
12
二、执行 STRAT,开始给定义的寄存器赋值,然后跳转到 LOOP 子程序执行
分析:寄存器 r5 的值是 0x78,即是:1*2*3*4*5=120 汇编程序代码
9
3、 编写子程序调用程序 p3xxxx3.s,求 1!+2!+3!…+5!;其中子程序完成求 n!任务, 主程序完成求阶乘和的任务。
一、开始调试,执行 STRAT,给寄存器赋值,然后跳转到 LOOp 子程序执行
二、开始执行,r0=r0+1=1+1=2,同时 r3=r0*r1=2*1=2,如下面的图中的寄存器显示
分析:上面的图显示,r0=1,r1=1 三、开始执行 1*2
分析:上面的图显示:r0 自加 1,r0=2,r1=1 四、下面的图显示,r1*r0=r3=1*2=3
五、把 1*2=2 的值赋给 R1,
13
六、r0=2+1=3
七、R1*R0=2*3=6,值送到寄存器 R3 存放,r3=6
八、r0 自加 1 成 4,R0=4,R2=6
3
五、
分析:上面的图显示,寄存器 r0 的值是 0x28,即是 2*16+8=40=19+21 六、
分析:上面的图显示,寄存器 r0 的值是 0x2c, 即是 2*16+12=44=19+21+4 七、
汇编语言循环程序实验报告

一、实验目的(1) 加深对循环结构的理解;(2) 掌握循环程序的设计方法;(3) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。
同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。
2.设STR字符串是以0结尾。
试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。
3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。
三、算法描述流程图实验内容1、2、3的流程图分别为图1、图2、图3。
图1 图2 图3四、实验步骤1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。
同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。
1)输入源程序:DATA SEGMENTBUF DW 23,123,-12,-210,45,0,90,-453BUF1 DW 8 DUP(0)BUF2 DW 8 DUP(0)A DW ?B DW ?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXLEA BX, BUFLEA SI, BUF1LEA DI, BUF2MOV A,0MOV B,0MOV CX,8L0: MOV AX,[BX]CMP AX,0JGE L1MOV [DI],AXADD DI,2INC BJMP NEXTL1: MOV [SI],AXADD SI,2INC ANEXT: ADD BX,2LOOP L0MOV AH, 4CHINT 21HCODE ENDSEND START2)运行程序。
汇编程序设计 分支与循环混合结构程序设计 实验报告

《汇编语言程序设计》
实验报告
实验六 分支与循环混合结构程序设计
2
实验目的
1、掌握利用.IF语句实现分支程序的设计方法; 2、掌握利用.REPEAT语句实现循环程序的设计方法; 3、掌握DIV指令的使用特点; 4、掌握地址表的定义和使用方法。
实验内容
实现成绩单的分等级统计功能,在数据段中有成绩单的定义,并包含有若干个分数,程 序根据成绩单数据的个数循环分别统计个分数段成绩的个数,最后输出个等级段的分数个数。 要求:成绩单数据少于100字节,输出的每个档次统计值按两位数显示。
scoreo db 10,13,'Score "Other" count is:$'
table dw scoreo,scoree,scored,scorec,scoreb,scorea ;定nt
mov si,0
begin:
;统计各个分数段的成绩个数
图 6-3 运行程序输出结果察看
3、修改成绩单的内容再重新汇编和运行程序,观察程序的结果变化情况。
5
图 6-4 修改成绩单后,运行程序输出结果察看
4、利用DEBUG工具的U命令反汇编可执行程序,观察.IF语句及.REPEAT语句所对应的汇编指 令情况。
6
图 6-5 利用DEBUG工具的U命令反汇编可执行程序并观察
实验体会
1. 分支伪指令的具体格式如下:
图 6-8 分支伪指令格式 2. REPEAT 型循环伪指令:
REPEAT 型循环在执行完循环体后,才判定逻辑表达式 condition 的值。若该 表达式的值为真,则终止该循环,并将执行伪指令.UNTIL[CXZ]后面的指令,否 则,将向上跳转到伪指令.REPEAT 之后的指令,为继续执行其循环体作准备。
汇编实验报告--分支程序设计实验

实验四分支程序设计实验学生姓名:何茂杰学号:2010305104 专业班级:计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1.掌握分支程序的设计方法;2.掌握利用DEBUG修改参数、检查结果的方法;3.熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
二、实验内容p181,例5.10把x的绝对值赋给y,x为一个四字节有符号数。
三、实验环境PC微机DOS操作系统或Windows 操作系统四、实验要求1.画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。
2.说明本实验是如何利用DEBUG进行调试的。
五、主要实验步骤跳跃表法可以使程序根据不同的条件转移到多个程序分支中去。
步骤;第一步:定义所要使用的数据段,并分别定义是字还是字节。
第二步:对所要使用寄存器进行压栈处理。
第三步:书写子程序,即寄存器中哪一位为1(从低位到高位)把程序转移到8个不同的程序分支中去。
第四步:测试结果。
1.对.EXE文件进行调试运行。
(1)用DEBUG调试运行,学会修改AL内容的方法;(2)对DSPKEY.EXE键入不同的字符,分别进行调试;(3)在MS-DOS下运行这两个.EXE文件。
六.实验结果及测试子程序:cmp al, 0 ;AL为逻辑尺je continuelea bx, branch_tableL:shr al, 1 ;逻辑右移jnc add1jmp word ptr[bx];段内间接转移add1: add bx, type branch_table ;add bx,2jmp L七.心得体会该实验让我了解用变址寻址方式实现跳跃表法源代码:Brand_addresses segmengtBranch_table dw routine_1dw routine_2dw routine_3dw routine_4dw routine_5dw routine_6dw routine_7dw routine_8branch_addresses endsprocedure_select segmentmain proc farassume cs: procedure_select ,ds:branch_addresses start:push dssub bx,bxpush bxmov bx,branch_addressesmov ds,bxcmp al,0je continue_main_linemov si,0l:shr al,1jnb not_yetjmp branch_table[si]not_yet:addsi,type branch_tablejmp lcontinue_main_line:routine_1:routine_2:retmain endpprocedure_select endsend start。
汇编语言程序设计实验报告二(分支循环程序实验)

汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的1、掌握分支程序、循环程序的设计方法。
2、熟悉DEBUG程序的使用方法。
3、掌握汇编语言程序的编辑、汇编、连接以及调试过程。
二、实验内容1、编写一程序,将内存中某一区域的数据传送到另一个区域中(要求用循结构,不考虑数据块重叠问题)。
2、编写一程序,将内存中某一区域的数据传送到另一区域(要求考虑数据块重叠问题)。
三、实验准备1、预习数据传送指令,熟悉分支和循环程序设计方法。
2、预习DEBUG调试程序的使用方法。
3、根据实验内容要求,编写好实验源程序。
四、实验步骤1、用QE或其它编辑软件,在计算机上编辑源程序,使其正确无误。
2、汇编、连接源程序,产生.EXE可执行文件。
3、运行程序。
(1) 进入DEBUG。
打入DEBUGT MYPROG.EXE。
MYPROG为所编程序的文件名。
(2) 先用G命令连续剧连续执行程序,程序执行完毕后,观察运行结果。
如果执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误,则执行下一步。
(3) 检查程序。
在程序中设置若干断点,以便杳出错误所在。
(4) 采用单步命令T或执行程序,观察各寄存器和存储单元内容,以便找到错误之处。
五、实验报告要求1、列出程序清单,并给出程序流程图。
2、总结实现数据传送的几种方法,指出它们的区别。
开始3、分析实验中所遇到的一些问题,分析错误原因。
4、说明本实验中是如何使用DEBUG进行调试的。
CX、SI、DI置初值六、流程图勤开始设置增量方式CX、SI、DI置初值保存SI内容AL [SI] SI SI+源块长度[DI] AL N SI>DIYSI SI+1 恢复SI内容恢复SI内容DI DI+1CX CX-1 设置减量方式N CX=0, SI指向源块末尾DI指向目的块末尾Y结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y结束题二流程图七、程序清单题一程序清单:STACK SEGMENT STACK ‘STACK’DB 100 DUP(0)STACK ENDSDATA SEGMENT PARA ‘DATA’SOUR DB 0、1、2、3、4、5、6、7、8、9 DEST DB 10 DUP(,)DB ‘$’DATA ENDSSEGMENT PARA‘CODE’ASSUME CS:CODEMAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,10MOV SI,offset SOURMOV DI, offset DESTAGAIN: MOV AL,[SI]MOV [DI],ALINC SIIN DILOOP AGAINMOV DX,offset DESTMOV AH,09HINT 21HRETMAIN ENDPCODE ENDSEND START题二程序清单:DATA SEGMENT PARA ‘DATA’STRG DB ‘ABCDEFGHIJKLMNOP’STG1 EQU STRG+4STG2 EQU STHG+8STRSE EQU 6DATA ENDSSTACK SEGMENT PARA ‘CODE’DB 100 DUP(0) STACK ENDSCODE SEGMENT PARA ‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,STRSEMOV SI,OFFSET STG1MOV DI,OFFSET STG2CLDPUSH SIADD SI,STRSE-1CMP SI,DIPOP SIJL MOVESTDADD SI,STRSE-1ADD DI,STRSE-1 MOVE: REP MOVSB RETMAIN ENDPCODE ENDSEND START。
汇编实验报告二

汇编语言程序设计实验报告实验名称循环结构与子程序设计实验班级学号姓名日期成绩评阅人软件学院一、实验目的与意义1、掌握循环结构程序的设计、子程序的设计及调试技巧与方法。
2、加深对循环结构的理解。
3、熟练掌握DEBUG的常用指令,学会用DEBUG调试程序。
4、掌握子程序的结构和使用方法。
5、加深对于循环指令的使用和理解。
二、实验环境操作系统:Windows XP软件名称:Editplus3.0,MASM5.0实验地点:综合楼311三、实验的预习内容实验四:单重循环程序设计实验预习内容:在实验前要了解循环程序的组成结构,要着重了解循环控制指令、串操作指令和操作功能,以及在循环控制过程中寄存器的使用,这样便于在程序中操作寄存器,为我们的编程提供了巨大的便利。
我们还需要掌握分支跳转的指令,虽然本实验是单重循环的实验,但仍然需要分支结构来实现跳转。
我们还需要掌握编制循环控制结构的技巧。
实验五:多重循环程序设计实验预习内容:在实验前应该了解多重循环结构的特点,掌握单重循环和多重循环的汇编指令的使用方法,以及各指令中寄存器的使用情况,这样在编写程序时可以更加灵活的使用寄存器。
我们还应该了解编制多重循环结构的技巧。
实验六:子程序及宏指令设计实验预习内容:在实验前要了解子程序和宏指令的定义,了解有关子程序和宏指令的使用方法,以及子程序和宏指令的调用方法。
四、实验的步骤与调试方法(1)单重循环程序设计实验实验步骤:首先,我将5个数字存储到DATA1的连续单元里,将数字的个数存储到CNT当中。
之后,我在代码段当中,取出DATA1中的数据,将其与100相比,如果两个数相等就输出Y,如果没有,则继续取出下一个数据,直到将所有的数据都比较完,如果都不相等的话则输出N。
对于使用字符串指令来实现该功能,大体原理相同,主要区别为使用了搜索字符SCASB。
异常与调试方法:1、在实验中,发现每次的结果都不正确,部分代码如下:DSEG SEGMENT ;定义数据段DATA1 DW 1,2,3,100CNT DW 4DSEG ENDS经过分析发现,单个数据定义为了字类型,数的大小和性质不对,在声明一组数放在一个地址空间中,我们应该将其定义为字节类型的数据。
北京理工大学汇编第四次(分支和循环程序设计实验)报告

北京理工大学汇编第四次(分支和循环程序设计实验)报告汇编第四次(分支和循环程序设计实验)报告一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。
二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。
汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减产生的结果来进行。
1.无条件转移指令JMP无条件转移指令JMP是使程序无条件转移至目标处,又分为段内转移、段间转移。
2.条件转移指令JXX条件转移指令可分为三大类:1).简单条件转移指令。
根据单个标志位的状态判断转移条件。
下表表示条件转移指令标志位的状态:2).无符号数条件转移指令。
假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是A-B,其转移指令如下:3)带符号数条件转移指令。
在汇编程序设计中,要熟练使用循环指令和跳转指令等来实现循环,理解循环体结构中的初始化部分、循环体、结束部分,并且要结合前面分支结构相关的知识点,加深对循环结构的理解和掌握。
循环结构的组成及其设计方法的知识要点有:1、循环程序的基本结构通常由3部分组成1) 初始化部分建立循环初始值,为循环做准备,如设置地址指针,(BX/SI/DI/BP),初始化循环控制变量或计数器(CX),数据寄存器(AX/DX)初值等.2) 循环体循环体是循环程序的主体,是程序中重复执行的程序段.它是由循环工作部分、修改部分、和循环控制部分。
①循环工作部分:完成程序功能的主要程序段,用于解决程序的实际任务;②修改部分:对循环参数进行修改,并为下一次循环做准备;③循环控制部分:判断循环结束条件是否满足。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(7).x和z比较:x大于z,仍存于AX中;
(8).输出运行结果:在数据段进行查看,max预先申请的内存单元[0004 ]中,存放着x的值。
题目二:
设有十个学生的成绩分别是76,69,84,90,73,88,99,63,100和80分。编制一个子程序统计60~69分,70~79分,80~89分,90~99分,和100分的人数,并分别存放到S6,S7,S8,S9,S10单元中。
2.源程序清单
datasegment
xdw 1ah
ydw 0ah
zdw 01h
maxdw ?
dataends ;数据段定义
codesegment
assume ds: data, cs: code
start:
mov ax, data
mov ds, ax ;初始化数据段
mov ax, x
cmp ax, y
dseg ends
code segment ;代码段定义
main proc far
assume cs:code, ds:dseg
start:
push ds
sub ax, ax
push ax
mov ax, dseg
mov ds, ax ;初始化数据段
call sub1
ret
main endp
sub1 proc near ;sub1子程序
(5).初始数据段
(6).分别将AX,BX,CX,SI压栈,保留初始数据,
(7).先选中第一个成绩,将BX赋值10,除以该成绩,将商存于BL;
(8).用商减去6得到的差,存于BX并逻辑左移一位;
(9)将BX置1后,加1继续循环,知道BX为10,循环结束;
(10)循环结束,在数据段查看结果,如下图,[0013]=2,[0014]=2,[0015]=3,[0016]=2,[0017]=1,分别对应不同成绩段的个数。
(9).先输入空格,符合继续写入的条件;
(10).输入第一个字符“0”;
(11)输入第二个字符“K”;
(12)再次输入空格,结束字符串的写入;
(13).输出结果“0k”,查看内存单元,如下图:
四、总结
int 21h ;输入字符
test flag,01h
jnz follow ;不为0时,跳转;否则顺序执行
cmp al,20h
jnz exit ;和空格键比较,判断是否输入的字符是空格键,如果不是,则跳转,否则顺序执行
mov flag,1
jmp next ;跳转到next段程序执行
follow:
cmp al,20h
dseg segment ;数据段定义
num dw 76,69,84,90,73,88,99,63,100,80 ;十个成绩分别存入num为首地址的10个内存单元
n dw 10
s6 dw 0
s7 dw 0
s8 dw 0
s9 dw 0
s10 dw 0 ;n=10,n是数据总数,S6~S10分别存储不同成绩段的个数
题目三:
编写一个程序:从键盘输入一行字符,要求低一个键入的字符必须是空格,如不是,则退出程序;如是,则开始接受键入的字符并顺序存放在首地址为BUFFER的缓冲区中(空格符不存入),直接接收到第二个空格符时退出程序。
1.设计:
先预申请足够的以buffer为首地址的内存单元,设置一个标志变量来判断输入的字符个数。先输入一个字符,判断是否为空格键,如果是,则程序继续进行,并将之后输入的非空格的字符串存入申请的内存单元,直到再一次输入的为空格为止;如果不是,则结束程序。
code ends
end start ;程序结束
3.调试过程:
(1).用masm程序产生mwn5.obj文件,没有错误,如下图:
(2).用link程序产生mwn5.exe文件,如下图:
(3).用u命令反汇编,查看代码段,数据段所在的内存单元;
(4).查看数据段,初始存入的十个成绩[0000]~[0011]段,[0012]存的数据总数10,而S6~S10这五个内存单元全是0,为申请占用的空间。
cbw
subx, 1
inc s6[bx]
add si,2
loop next ;得到第一个数为S6区间,S6加1,继续下一个内存单元的数据,直到十个数据都判断结束
pop si
pop cx
pop bx
pop ax
ret ;将保留的数据出栈
sub1 endp ;子程序结束
(2).用link程序产生mwn6.exe文件,如下图:
(3).用u命令反汇编,查看代码段,数据段所在的内存单元;
(4).查看数据段,初始全零;
(5).初始化数据段,并保留AX、BX、CX的值;
(6).准备存储单元;
(7).直接输入字符“r”;
(8).第一个输出结果,由于直接输入字符,不符合输入规则,因此不存入内存单元,如下图:
start:
push ds;保存原始数据
sub ax,ax;把0拖入ax中
push ax;存到堆栈中
mov ax,datarea;datarea段地址
mov ds,ax;存入DS寄存器中
lea bx,buffer ;将buffer首地址存入BX
mov flag,0 ;flag清零
next:
mov ah,01h
《汇编语言程序设计》实验报告
实验名循环、分支、子程序设计实验室实验楼实验日期2014-06-09
一、实验目的及要求
1.熟悉命令格式,功能,加强对指令系统的理解
2.编写简单循环、选择、子程序的结构程序
3.单步跟踪调试,观察寄存器的变化和指令执行的结果
二、实验环境
硬件环境:一台微型计算机
软件环境:windows xp,debug环境,masm
jg l1 ;判断x是否大于y,如果x大,则程序跳转到l1;否则顺序执行
mov ax, y
jgexit
l2: mov ax, z
jmp exit
l1: cmp ax, z ;判断x是否大于z,若z大时,则跳转至l2;否则顺序执行exit段程序
jle l2
exit: mov max, ax
mov ah,4ch
1.设计:
分别为十个成绩、成绩总个数、分段的5个区间申请内存单元,初始化数据段;将AX,BX,CX压栈,保留原始数据。选取第一个成绩,存入AX中,该数据除以10,得到商存入BX,判断商的所属区间,给所属区间加1,继续下一个,循环直到十个全部判断结束,pop出栈,得到属于各区间的成绩个数,程序结束。
2.源程序清单
int 21h;将最大值存于max中
codeends
end start
3.调试过程:
(1).用masm程序产生mwn4.obj文件,没有错误,如下图:
(2).用link程序产生mwn4.exe文件,如下图:
(3).用u命令反汇编,查看代码段,数据段所在的内存单元;
(4).查看数据段初始数据:
(5).初始化数据段
push ax
push bx
push cx
push si ;分别将AX,BX,CX,SI压栈,保留数据
mov si, 0
mov cx, n ;CX赋值为10,数据总数
next:
mov ax, num[si] ;选中第一个数据,存入AX中
mov bx, 10
div bl
mov bl, al ;该数据除以10后将商存入BL
jz exit ;如果为0,则跳转到exit,否则顺序执行
mov [bx],al ;将AL的值存入BX所指的内存单元
inc bx
jmp next ;继续判断下一个输入的字符
exit:
ret;返回dos
main endp
prognam ends
end start ;程序结束
3.调试过程:
(1).用masm程序产生mwn6.obj文件,没有错误,如下图:
2.源程序清单
datarea segment;定义数据段
buffer db 80 dup(?) ;预申请了以buffer为首地址的内存单元
flag db ?
datarea ends
prognam segment;定义编码段
main proc far
assume cs:prognam,ds:datarea
三、实验内容(至少写3个程序)
题目一:
编写程序,求三个数据中的最大值,并将最大值存入MAX字单元中。
1.设计:
将x存入ax中,先与y比较,当x大时,x仍存于ax中,再与z比较,如果x大,则将x存入max中;否则将z存入max中。当y大时,将y存入ax中,覆盖较小的x后,与z比较,得出最大数存于max中。