实验7 寻址方式在结构化数据访问中的应用
汇编语言-王爽-完美高清版视频教程

汇编语言》-王爽-完美高清版-零基础汇编语言入门书籍PDF格式同时按ctrl+要下载的地址既可下载对应的视频下载地址:/file/f61cb107c8001第一章- 基础知识01下载地址:/file/f6806f45b8002第一章- 基础知识02下载地址:/file/f6ec42d4d3003第一章- 基础知识03下载地址:/file/f6deb05ec4004第一章-基础知识04下载地址:/file/f6e51f6838005第一章- 基础知识05下载地址:/file/f66edaf8d3006第二章- 寄存器(CPU工作原理)01下载地址:/file/f6d07e07b9007第二章- 寄存器(CPU工作原理)02下载地址:/file/f6d7f585a8008第二章- 寄存器(CPU工作原理)03下载地址:/file/f639d8b3cf009第二章- 寄存器(CPU工作原理)04下载地址:/file/f6dcadbde6010第二章- 寄存器(CPU工作原理)05下载地址:/file/f6ea3f01c1011第二章- 寄存器(CPU工作原理)06下载地址:/file/f65b96a06f012第二章- 寄存器(CPU工作原理)07下载地址:/file/f682da085a013第三章- 寄存器(内存访问)01下载地址:/file/f6486e698014第三章- 寄存器(内存访问)02下载地址:/file/f6b7491d9f015第三章- 寄存器(内存访问)03下载地址:/file/f622b7f9a7016第三章- 寄存器(内存访问)04下载地址:/file/f64e2424b9017第三章- 寄存器(内存访问)05下载地址:/file/f6e5132d4d018第三章- 寄存器(内存访问)06下载地址:/file/f655c10e86019第三章- 寄存器(内存访问)07下载地址:/file/f6b22e64e6020第四章- 第一个程序01下载地址:/file/f6812126a4021第四章- 第一个程序02下载地址:/file/f6523e625c022第四章- 第一个程序03下载地址:/file/f63e0ccb28023第五章- [BX]和loop指令01下载地址:/file/f611e07b8a#024第五章- [BX]和loop指令02下载地址:/file/f6e047bccc#025第五章- [BX]和loop指令03下载地址:/file/f6d348d781#026第五章- [BX]和loop指令04下载地址:/file/f6ada24153#027第五章- [BX]和loop指令05下载地址:/file/f64f97518b#028第五章- [BX]和loop指令06下载地址:/file/f6f9ba96f8#029第六章- 包含多个段的程序01下载地址:/file/f650e06f38#030第六章- 包含多个段的程序02下载地址:/file/f683ee5b2a#031第六章- 包含多个段的程序03下载地址:/file/f69009bfc2#032第七章- 更灵活定位内存地址的方法01下载地址:/file/f6ea427646#033第七章- 更灵活定位内存地址的方法02下载地址:/file/f6acdc6b7f#034第七章- 更灵活定位内存地址的方法03下载地址:/file/f6c85745d0#035第七章- 更灵活定位内存地址的方法04下载地址:/file/f61a26cf12#36第七章- 更灵活定位内存地址的方法05下载地址:/file/f631edf5c6#037第七章- 更灵活定位内存地址的方法06下载地址:/file/f6b0fa6fb8#038第八章- 数据处理的两个基本问题01下载地址:/file/f6f5fe8962#039第八章- 数据处理的两个基本问题02下载地址:/file/f6bf975e0#040第八章- 数据处理的两个基本问题03下载地址:/file/f6d522784c#041第八章- 数据处理的两个基本问题04下载地址:/file/f6b5ac9991# 042实验七寻址方式在结构化数据访问中的应用下载地址:/file/f62e80ced5#076第十七章_使用BIOS进行键盘输入和磁盘读写02/file/bhbgrnfz#077第十七章_使用BIOS进行键盘输入和磁盘读写03[url=/file/dnsl0kxp#[/sell]/file/dnsl0kxp#[/sell[/url]]。
汇编实验:寻址方式在数据访问中的应用

汇编实验:寻址⽅式在数据访问中的应⽤例⼦:assume cs:codesgdatasg segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985'db '1986','1987','1988','1989','1990','1991','1992','1993','1994','1995';表⽰21年的21个字符串dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,590827dd 803530,1183000,1843000,2759000,3753000,4649000,5937000;21年总收⼊的21个dword数据dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;表⽰21年公司雇员⼈数的21个数据datasg endstable segmentdb 21 dup ('year summ ne ?? ')table ends将data段中的数据按如下格式写⼊table中: 代码如下:assume cs:codesgdatasg segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985'db '1986','1987','1988','1989','1990','1991','1992','1993','1994','1995';表⽰21年的21个字符串dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,590827dd 803530,1183000,1843000,2759000,3753000,4649000,5937000;21年总收⼊的21个dword数据dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;表⽰21年公司雇员⼈数的21个数据datasg endstable segmentdb 21 dup ('year summ ne ?? ')table endsstacksg segmentdb 16 dup (0)stacksg endscodesg segmentstart:mov ax,datasgmov ds,axmov ax,tablemov es,axmov ax,stacksgmov ss,axmov sp,16;栈⽤来储存CX中的数据来进⾏双重循环mov cx,21mov bx,0;BX储存table段中每⾏的内存单元,0<=(BX)<=F,所以每次循环BX要清0mov di,0;DI⽤来访问储存公司收⼊的数据段mov si,0;SI⽤来访问储存公司员⼯数量的数据段mov bp,0;BP⽤来访问储存公司年份的数据段s0:push cxmov cx,4mov bx,0s1:mov al,ds:[bp]mov es:[bx],alinc bpinc bxloop s1;第⼀次循环完毕BP会指向下⼀个年份的⾸地址,BX会指向table:04H,下⾯将空格输⼊此单元格mov al,''mov es:[bx],alinc bxmov ax,ds:[si+84];21个年份字符串,每个年份有4个数字字符,共占84Byte,si = 0时ds:[si+84]指向第⼀年公司收⼊mov es:[bx],axadd bx,2add si,2mov ax,ds:[si+84]mov es:[bx],axadd si,2add bx,2;此代码段结束时si += 4,ds:[si+84]指向下⼀年收⼊mov al,''mov es:[bx],alinc bxmov ax,ds:[di+168]mov es:[bx],axadd di,2add bx,2mov al,''mov es:[bx],almov ax,es:[5]mov dx,es:[7]div word ptr es:[0ah];注意⼀下被除数32位除法的规则mov es:[0dh],axmov al,''mov es:[bx],almov ax,esinc axmov es,ax;在第⼀次循环结束时给es⾃增1,使其指向table:10H,在以后的循环同理;让其指向“下⼀⾏”pop cxloop s0mov ax,4c00hint 21hcodesg endsend start运⾏结果:。
七种寻址方式举例例题

七种寻址方式举例例题
1. 直接寻址方式:例如,要访问内存中地址为100的数据,直接将地址100传递给内存控制器即可。
2. 立即寻址方式:例如,要将立即数5存储到寄存器R1中,直接将立即数5传递给寄存器R1即可。
3. 间接寻址方式:例如,要访问内存中地址存储在寄存器R2中的数据,先从寄存器R2中获取地址,再将该地址传递给内存控制器。
4. 寄存器寻址方式:例如,要将寄存器R3中的数据存储到寄存器R4中,直接将寄存器R3和寄存器R4传递给寄存器控制器。
5. 寄存器间接寻址方式:例如,要访问内存中地址为寄存器R5中存储的地址的数据,先从寄存器R5中获取地址,再将该地址传递给内存控制器。
6. 基址寻址方式:例如,要访问内存中基地址为寄存器R6中存储的地址加上一个偏移量的数据,先从寄存器R6中获取基地址,再将基地址加上偏移量得到目标地址,最后将目标地址传递给内存控制器。
7. 变址寻址方式:例如,要访问内存中地址为寄存器R7中存储的地址加上寄存器R8中存储的地址的数据,先从寄存器
R7中获取地址,再从寄存器R8中获取地址,最后将两个地址相加得到目标地址,将目标地址传递给内存控制器。
汇编语言 王爽_完整答案

第1章基础知识检测点1.1(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。
(2)1KB的存储器有1024个存储单元。
存储单元的编号从0到1023。
(3)1KB的存储器可以存储1024*8个bit,1024个Byte。
(4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。
(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。
(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。
则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。
(7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。
(8)在存储器中,数据和程序以二进制形式存放。
第2章寄存器答案检测点2.1(1) 写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX=F4A3Hmov ah,31H AX=31A3Hmov al,23H AX=3123Hadd ax,ax AX=6246Hmov bx,826CH BX=826CHmov cx,ax CX=6246Hmov ax,bx AX=826CHadd ax,bx AX=04D8Hmov al,bh AX=0482Hmov ah,bl AX=6C82Hadd ah,ah AX=D882Hadd al,6 AX=D888Hadd al,al AX=D810Hmov ax,cx AX=6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
解:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。
内存操作数及寻址方式的使用

武汉工程大学电气信息学院《面向对象程序设计》实验报告[ 1 ]专业班级过程装备与控制工程1班实验时间2015 年 5 月日学生学号实验地点机电工程学院205 学生姓名指导教师华夏实验项目内存操作数及寻址方式的使用实验类别设计实验实验学时3学时实验目的及要求通过实验掌握下列知识。
(1)DEBUG命令:G、N、W、L及Q。
(2)8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。
(3)8088指令:INC、DEC、LOOP、INT3、INT20H,寄存器SI、DI。
(4)8088汇编语言伪操作:BYTE PTR,WORD PTR.(5)求累加和程序和多字节加减法程序。
成绩评定表类别评分标准分值得分合计上机表现按时出勤、遵守纪律认真完成各项实验内容30分《电子线路CAD设计》实验报告报告质量程序代码规范、功能正确填写内容完整、体现收获70分评阅教师:日期:年月日实验内容(说明:此部分应包含:实验内容、实验步骤、实验数据与分析过程等)1.一、实验内容、实验方法与步骤、实验数据与结果分析1)内存操作数及各种寻址方式使用(1)先输入程序内容,用A命令输入上述程序,运行如下:(2)并用T命令逐条运行,运行如下:(3)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。
程序运行如下:(4)注意D命令显示结果中右边的ASCII字符及双字节数存放法。
(5)思考有关指令中的BYTE PTR及WORD PTR伪操作不加行不行,试一试。
2)求累加和程序(1)用A命令将程序输入到100H开始的内存中,在输入时记下标号LOP和J的实际地址,在输入LOOP指令时LOP用实际地址代替。
(2)用命令NAA将此程序命名为文件AA(3)用R命令将BX:CX改为程序长度值(4)用命令W100将此程序存放到AA命名的磁盘文件中(5)用命令Q退出DEBUG实验总结(说明:总结实验认识、过程、效果、问题、收获、体会、意见和建议。
寻址方式微机原理及应用共48页文档

43、重复别人所说的话,只需要教育; 而要挑战别人所说的话,则需要头脑。—— 玛丽·佩蒂博恩·普尔
44、卓越的人一大优点是:在不利与艰 难的遭遇里百折不饶。——贝多芬
45、自己的饭量自己知道。——苏联
寻址方式微机原理及应用
•
26、我们像鹰一样,生来就是自由的 ,但是 为了生 存,我 们不得 不为自 己编织 一个笼 子,然 后把自 己关在 里面。 ——博 莱索
•
27、法律如果不讲道理,即使延续时 间再长 ,也还 是没有 制约力 的。— —爱·科 克
•
2
•
29、在一切能够接受法律支配的人类 的状态 中,哪 里没有 法律, 那里就 没有自 由。— —洛克
•
30、风俗可以造就法律,也可以废除 法律。 ——塞·约翰逊
41、学问是异常珍贵的东西,从任何源泉吸 收都不可耻。——阿卜·日·法拉兹
寻址方式与指令系统节

寻址方式与指令系统节导言在计算机科学中,寻址方式和指令系统是计算机体系结构设计中至关重要的两个方面。
寻址方式决定了数据的存取方式,而指令系统则规定了计算机执行操作的方法。
本文将探讨寻址方式和指令系统在计算机设计中的重要性,并对它们的一些常见形式和特点进行详细介绍。
寻址方式直接寻址直接寻址是一种简单的寻址方式,其中地址字段直接指向要访问的内存单元。
这种寻址方式效率高,但存储器可以直接访问的容量有限。
间接寻址在间接寻址中,地址字段指向另一个存储位置,该位置包含最终要访问的内存地址。
这种方式可以扩展寻址范围,但多了一次内存访问的开销。
寄存器寻址在寄存器寻址中,指令中直接给出一个寄存器地址,该寄存器中存储了要访问的内存地址。
这种方式速度快,但寄存器数量有限。
基址寻址基址寻址方式使用一个基址寄存器存储一个基地址,再使用另一个寄存器存储偏移量,通过将这两者相加得到最终的内存地址。
这种方式适合访问分散存储的数据结构。
变址寻址变址寻址方式类似于基址寻址,不同之处在于,变址寻址方式允许加上的偏移量不是固定的,而是由指令中提供的。
这种方式适合迭代访问数组等数据结构。
指令系统CISC复杂指令集计算机(CISC)是一种指令系统,其指令集包含了丰富的功能,一条指令可以完成多种操作。
CISC指令集通常包含复杂的寻址方式和复杂的指令格式,适合处理复杂的任务。
RISC精简指令集计算机(RISC)是另一种指令系统,其每条指令只执行一项操作,指令集更加简单明了。
RISC指令集通常使用固定长度的指令格式,寻址方式也相对较简单,适合处理简单快速的任务。
SIMD单指令多数据流(SIMD)是一种并行计算技术,其指令系统中一条指令可以同时处理多个数据元素。
SIMD适用于需要大量相同计算的任务,例如图像处理和数字信号处理。
VLIW超长指令字(VLIW)是一种指令系统,其一条指令包含多个操作,由硬件解析并同时执行。
VLIW通常需要编译器生成多个操作的组合,并且对硬件要求较高。
七种寻址方式

七种寻址方式标签:it一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是8位、16位或32位,该数值紧跟在操作码之后。
如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。
例如:MOV AH, 80H ADD AX, 1234H MOV ECX, 123456HMOV B1, 12H MOV W1, 3456H ADD D1, 32123456H其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,在汇编语言中,规定:立即数不能作为指令中的第二操作数。
该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。
立即数寻址方式通常用于对通用寄存器或内存单元赋初值。
图是指令“MOV AX, 4576H”存储形式和执行示意图。
二、寄存器寻址方式指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。
把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下:8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。
寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。
1、源操作数是寄存器寻址方式如:ADD VARD, EAX ADD VARW, AX MOV VARB, BH等。
其中:VARD、VARW和VARB是双字,字和字节类型的内存变量。
在第4章将会学到如何定义它们。
2、目的操作数是寄存器寻址方式如:ADD BH, 78h ADD AX, 1234h MOV EBX, 12345678H等。
3、源和目的操作数都是寄存器寻址方式如:MOV EAX, EBX MOV AX, BX MOV DH, BL等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机学院实验报告课程汇编语言实验名称实验7 寻址方式在结构化数据访问中的应用专业计算机科学与技术2018年 12 月 24 日一、实验目的1.定位内存单元的寻址方式汇总2.寻址方式的综合应用3.转移指令的分类和原理4.熟悉在显存中编程的方法二、实验内容及要求( 一) 寻址方式的汇总及综合应用1.定位内存单元的寻址方式有几种,并举例说明。
2.寻址方式在结构化数据访问中的应用。
Power idea 公司从 1975 年成立一直到 1995 年的基本情况如下。
年份收入 ( 千美元 )雇员人均收入 ( 千美元 ) 1975163?1976227? 19773829? 1978135613? 1979239028? 1980800038? 1995593700017800?下面的程序中,已经定义好了这些数据:assume cs:codesgdata segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995';年份dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ; 公司总收入dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;公司雇员人数data endstable segmentdb 21 dup('year summ ne ??')table ends编程,将 data 段中的数据按如下格式写入到人均收入 ( 取整 ) ,结果也按照下面的格式保存在table table段中,并计算21 年中的人均收入,结果也按照下面格式保存在table段中。
1 年地址占 1 行,0 1 2 3 4 5 6 7 8 9 A BC DE F每行的起始地址table:0‘1975’163? table:10H‘1976’227? table:20H‘1977’3829? table:30H‘1978’135613? table:40H‘1979’239028? table:50H‘1980’800038?Mtable:140H‘1995’593700017800?提示 : 可将 data 段中的数据看成是多个数组,而将 table 中的数据看成是一个结构型数据的数组,每个结构型数据中包含多个数据项,可用bx 定位每个结构型数据,用 idata 定位数据项,用 si 定位数组项中每个元素,对于 table 中的数据的访问可采用 [bx].idata和[bx].idata[si]的寻址方式。
注意,这个程序是目前为止最复杂的程序,它机会用到了我们以前学过的所有知识和编程技巧。
所以,这个程序是对我们从前学习的最好的实践总结。
三、实验解答过程及结果( 一) 寻址方式的汇总及综合应用1.定位内存单元的寻址方式有 5 种, 如下:(1)[idata]例: mov ax,[5] (ax)=((ds)*16+5)(2)[bx]例: mov ax,[bx] (ax)=((ds)*16+(bx))(3)[bx+idata]例: mov ax,[bx+5] (ax)=((ds)*16+(bx)+5)(4)[bx+si]或[bx+di]例: mov ax,[bx+si] (ax)=((ds)*16+(bx)+(si))(5)[bx+si+idata]或[bx+di+idata]例: mov ax,[bx+si+5] (ax)=((ds)*16+(bx)+(si)+5)2.寻址方式在结构化数据访问中的应用(1) 给出该设计过程或算法该题目地址的变化是有规律的,我们可以知道,程序运行完的table 段一共有21行,分别存放 21 年的数据,每行有 16 个字节,正好放满所有内容。
所以采用loop 循环 21 次,每次都在 table 段的对应行存放”年份( 4 字节) +空格 + 收入( 4 字节) +空格 +雇员数( 2 字节) +空格 +人均收入( 2 字节) +空格”形式的数据。
这里的数据我放在 es:[si+idata] 里, si 最初为 0,每次循环 +16 (即一行)。
而从 data 段的数据可以看出,第一块年数据地址之间相隔4,第二块收入数据地址之间相隔也是4,第三块雇员数据地址之间相隔2。
第一块数据和第二块数据地址之间相隔4*21=84(因为一个年数据占了4个字节),第二块数据和第三块数据地址之间也是相隔8 4(收入是 dword 数据)。
年数据用 ds:[bx]定位,收入数据用ds:[bx+84] 定位,bx 最初为0,每次循环bx+4(即跳到下个相应数据)。
雇员数用 ds:[di+168] 定位, di 最初为 0,每次循环 di+2 。
代码如下:assume cs:code,ds:data,ss:stackdata segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995';以上是表示21年的21个字符串dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示21年公司总收入的21个dword型数据dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;以上是表示21年公司雇员人数的21个word型数据data endstable segmentdb 21 dup ('year summ ne ?? ')table endsstack segment stackdb 128 dup(0)stack endscode segmentstart: mov ax,stackmov ss,axmov sp,128mov ax,datamov ds,ax ;设置数据从哪儿来mov ax,tablemov es,ax ;设置数据到哪儿去mov si,0 ;ds:[si] si=0 年份开始的偏移地址mov di,84 ;ds:[di] di=84 公司总收入开始的偏移地址mov bx,168 ;ds:[bx] bx=168 公司雇员人数开始的偏移地址mov bp,0 ;es:[bp] bp=0 数据存到table中的开始的偏移地址mov cx,21 ;循环21次inputTable: push ds:[si] ;把年份放到table的 year中用栈转移更简单pop es:[bp]push ds:[si+2]pop es:[bp+2]mov ax,ds:[di] ;把公司总收入放到table的 summ中因需算人均收入,故不使用栈mov dx,ds:[di+2] ;dd型占2个字,即4个字节mov es:[bp+5],ax ;bp+5 对应 sumov es:[bp+7],dx ;bp+7 对应 mmpush ds:[bx] ;把雇员人数放到table的 ne中pop es:[bp+0AH]div word ptr ds:[bx]mov es:[bp+0DH],ax ;把人均收入放到talbe的 ??中;0123456789ABCDE; db 21 dup ('year summ ne ?? ')add si,4 ;年份占4个字节add di,4 ;总收入占4个字节add bx,2 ;雇员人数占2个字节add bp,16 ;放入table中每一年换一行loop inputTablemov ax,4c00Hint 21Hcode endsend start(3)Table段中原始数据与最终结果比对。
前后对比如图:四、实验总结通过这次实验,我学会了寻址方式的多种形式以及他们的综合应用,还有转移指令的原理和各种用法。
在实验的过程中,我学会了编写一些复杂的程序,学会了判断程序的运行结果,懂得了更多的汇编知识,在汇编语言的学习上又有了新的进步。