《计科《汇编语言程序设计》_实验指导书.doc》由会员分享,可在线阅读,更多相关《计科《汇编语言程序设计》_实验指导书.doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、汇编语言程序设计实验指导书刘晓燕计算机与信息科学学院2009年5月目 录实验一 开发工具的使用2实验二 寻址方式(一):操作数寻址5实验三 寻址方式(二):转移地址寻址8实验四 字符串拷贝11实验五 表格查找14实验六 过程调用17实验七 分类统计字符个数20实验八 查找电话号码25实验一 开发工具的使用实验目的 1 熟悉DOS操作系统;2 熟悉文本编辑器、编译器、连接器及调试器的使用。 预习与实验要求 1 预习实验指导书及教材的有关内容,了解debug常用的命令;2 熟悉文本编辑器、编译器、连接器及调试器的使用。3 了解汇编程序的基本结构4 实验前认真听讲,服从安排。尽可能独立思考并完成实验
2、。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。 实验原理 DEBUG.EXE是DOS提供的用于调试可执行程序的工具软件,是汇编语言程序设计中常用的调试工具。在DEBUG环境下,不但可以调试经汇编、连接后生成的可执行程序,也可以编写简单的程序。DEBUG程序启动方法:在DOS提示符下键入:DEBUG 路径文件名Debug执行,并将指定文件装入内存,供调试。此时屏幕显示提示符“”,说明计算机当前处于DEBUG的管理之下,可接受、并执行DEBUG命令。MASM和LINK程序是Microsoft公司的汇编程序和连接程序,汇
3、编语言程序的上机过程如图1-1所示:myfile.asm编辑程序汇编程序连接程序myfile.crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe图1-1:汇编语言程序上机过程 实验内容 熟悉文本编辑器、编译器、连接器及调试器的使用。 了解汇编程序的基本结构,结合给出的示例程序eg01.asm练习汇编语言程序上机步骤。1. 启动dos环境开始-运行-输入cmd 或者 所有程序-附件-命令提示符2. 进入masm和link程序所在目录(1) 键入masm所在盘符(2) cd masm所在路径3.汇编程序:masm myfile.asm
4、4.连接程序:link myfile.obj5.调试程序:debug myfile.exe(1)u 反汇编(2)t4 运行前4步对照反汇编结果或者是打开list文件观察ip寄存器内容查看cx寄存器内容(3)d ds:0 查看数据段从0开始的内容(4)d es:0 查看附加数据段从0开始的内容(5)t 单步执行,查看cx寄存器内容(6)继续单步执行观察各寄存器变化情况(7)运行到inc di 处时 d es:0 查看附加数据段从0开始的内容(8)继续单步执行观察ip变化情况(9)继续单步执行观察ip变化情况(10) g 1d运行到loop 处时 d es:0 查看附加数据段从0开始的内容(11)
5、执行一次循环后再d es:0 观察附加数据段变化情况连续单步或者接第10步,输入t 再输入g1d(12)g 1f 运行到程序结束,d es:0 观察附加数据段变化情况(13)q 退出debug实验报告 1. 用文本编辑器输入示例代码,编译、连接;2. 调试程序eg01.exe,写出程序运行的相关情况。将实验内容第5步所有要求查看的内容写出来 思考题 1. 用debug的u指令反汇编和通过lst文件查看有什么差别?2. debug的t指令和g指令有哪些区别?附:示例程序eg01.asmdata segment :数据段定义 stringdb Happy New Year!, 0DH , 0AH
6、, $ countdw 17data endsextra segment ;附加数据段定义new_stringdb 17 dup(?)extra endscode segmentmain proc far assume cs:code, ds:data, es:extrastart: movax,data mov ds,ax mov ax,extra mov es,ax mov cx, count mov bx,offset string mov di,0 Next:mov dl,bx mov new_stringdi, dl inc bx inc di loop Next movah,4ch
7、int 21hmain endpcode endsend start实验二 寻址方式(一):操作数寻址实验目的 1 掌握操作数的不同寻址方式;2 继续熟悉DEBUG调试程序。 预习与实验要求 1复习教材的有关内容,回顾汇编语言程序中对操作数的7种寻址方式,回顾8086的实模式寻址;2回顾汇编程序上机过程以及debug常用指令;3回顾汇编程序的基本结构;4实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。 实验原理 计算机中的指令由操作码字段和操作数字段两部分组成,808
8、6中与数据有关的寻址方式一共有7种,用来确定操作数地址从而找到操作数。1. 立即寻址方式操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里;2. 寄存器寻址方式使用寄存器来存放要处理的操作数;3. 其它5种寻址方式:直接寻址方式、寄存器间接方式、寄存器相对寻址方式、基址变址寻址方式、相对基址变址寻址方式,操作数都在除代码段以外的存储区中, 在8086里,把操作数的偏移地址称为有效地址EA,这五种寻址方式分别对应五种计算EA的方法。4. 有效地址可以由以下三种成分组成:位移量(Displacement)是存放在指令中的一个8位或16位数,但它不是立即数,而是一个地址。基址
9、(Base)是存放在基址寄存器(BX或BP)中的内容。它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址。变址(Index)是存放在变址寄存器(SI或DI)中的内容。它通常用来访问数组中的某个元素或字符串中的某个字符。这三种成分都可正可负,以保证指针移动的灵活性。它们任意组合使用,可得到不同的寻址方式。 5伪操作DB、DW、DD分别用来定义字节、字和双字变量。实验内容 1. 使用多种寻址方式读写内存变量。(1)定义字节变量,字变量,双字变量;(2)使用直接寻址方式访问这些变量;(3)采用寄存器间接寻址访问这些变量;(4)采用寄存器相对寻址访问这些变量;(5)采用基址变址寻址方式
10、访问这些变量。2定义字节变量,字变量,双字变量使用伪操作DB、DW、DD,示例:data segment ;数据段定义data_dbDB11h,22h,a,bdata_dwDW1000h,2000h,3h,abdata_ddDD 1,2,h,9ahdata ends实验报告 1 根据实验要求,设计程序,在源程序中用(1)、(2)、(3)进行标注,并在指令后面注明所使用的寻址方式;2 用Debug调试程序,写明程序运行情况。可参考如下格式:当程序运行到(1)处时,*寄存器的内容为*,把*变量读取到寄存器中;运行到(2)处时,*寄存器的内容为*3 比较各种寻址方式,总结自己的实验心得。思考题 1
11、在使用存储器寻址方式的时候,可以使用哪些寄存器?2 字节变量,字变量,双字变量在内存中的实际存储是怎样的?对它们的访问有什么不同?3 比较直接寻址方式、寄存器间接方式、寄存器相对寻址方式、基址变址寻址方式有什么不同。附:示例程序eg02.asmdata segment x db11h,22h,a,bydw1000h,2000h,3h,abzdd1,2,h,9ahdata endscode segmentassume cs:code,ds:databegin:mov ax,datamov ds,axmov dx,y;(1)mov bx,offset xmov ah,bx;(2)lea si,ym
12、ov cx,si+2;(3) mov bx,offset zmovsi,8;(4)movax,bxsi;(5) movdx,bx+si+2;(6)movax,dx;(7)movah,4chint 21hcode endsend begin【当程序运行到时,DX为1000,Y的第一数读到DX中;运行到时,AX的内容是11EE,把BX=0000,DS:0000=11,读到AH中;当运行到时,CX的内容是2000,把SI+2=0006,DS:0006=2000读到CX(ax)?中;当运行到时,SI=0008,把8直接读到SI中;当运行到时,AX=5678,把BX+SI=0014,DS:0014=56
13、78,读到AX中;当运行到时,DX=1234,把BX+SI+2=0016,DS:0016=1234,读到DX中;当运行到时,AX=1234,把DX得女人读到AX中。】实验三 寻址方式(二):转移地址寻址 实验目的 1. 转移地址的4种寻址方式;2. 了解汇编程序中指令跳转是如何实现的。 预习与实验要求 1复习教材的有关内容,回顾汇编语言程序中对转移地址的4种寻址方式;2回顾汇编程序上机过程以及debug常用指令;3回顾汇编程序的基本结构;4实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK
14、或TLINK连接器。 实验原理 与转移地址有关的寻址方式最终确定一条指令的地址。1 顺序执行的指令地址是由指令指针寄存器IP自动增量形成的,而程序转移的地址必须由转移类指令和CALL指令指出,表示转向地址的寻址方式包括:段内直接寻址、段内间接寻址、段间直接寻址、段间间接寻址;2 本实验以JMP指令来实现程序的转移;3 与转移地址相关的有三个表示转移距离(称为位移量)的操作符:SHORT、NEAR、FARa) SHORT,短转移,表示位移量在-128127字节之间。b) NEAR,近转移,表示在同一段内转移,位移量在-3276832767字节范围内。c) FAR,远转移,表示转移距离超过32K字
15、节,在不同段之间转移。4 CS:IP寄存器总是指向下一条将要执行的指令的首地址(称为IP当前值),当转移指令执行后,必须修改IP或CS、IP的值。a) SHORT转移和NEAR转移,位移量分别用8位和16位表示,程序控制仍然在当前代码段,所以只修改IP的值,CS的值不变。b) FAR转移,程序控制超出了当前代码段,所以CS和IP都必须修改为新的值。5 与转移地址有关的4种寻址方式就是告诉CPU如何修改CS和IP的值,以达到控制程序转移的目的。实验内容 1 定义两个代码段;code1 segment ; 定义代码段1 assume cs:code1;code1 endscode2 segment
16、 ; 定义代码段2 assume cs:code2;code2ends2 加入段内短转移指令;JMP SHORT NEXT 3 加入段内近转移指令:直接和间接转移;段内直接近转移:JMP NEAR PTR NEXT 段内间接近转移:JMP TABLE BX 4 加入段间远转移指令:直接和间接转移。段间直接远转移:JMP FAR PTR NEXT 段间间接远转移:JMP DWORD PTR BX 实验报告 1 根据实验要求,设计程序,在源程序中用(1)、(2)、(3)进行标注,并在指令后面注明该指令所使用的寻址方式;2 用Debug调试程序,用U指令进行反汇编,查看指令地址,或者输出.lst文件
17、,查看编译之后的源程序。3 写明程序运行情况,对关键指令(JMP指令)加以跟踪,可参考如下格式:本程序从代码段2开始执行,(1)为段内近转移,直接寻址方式,所以(2)不执行,直接跳转到(3);(4)为段间远转移,直接寻址方式,IP和CS内容均发生变化,CS变为next所在的代码段段基址,IP为next段内偏移地址,程序跳转到(5)4比较4种寻址方式,总结自己的实验心得。 思考题 1 段内直接寻址的IP变化与段内间接寻址有什么不同?2 段内间接寻址对转移地址的寻址方法,与实验二中,操作数的寻址方法有什么异同?3 段间直接寻址与段内直接寻址对IP的修改有什么不同?4 段间间接寻址需要读出两个字的内
18、容,其中哪个字填入IP,哪个字填入CS?附:示例程序eg03.asmdata segmentaddr dw 0002h,1000h,001Bhdata endscode1 segment ;定义代码段1 assume cs:code1 mov ax, 5678h ;本程序中类似指令均无实际意义,主要用于跟踪程序; 运行情况next:mov bx,9abch ;(5)jmp short again ;(6)movsi,1234hagain:movdx,1000h ;(7)add dx,100hincdxmov bx,0004hjmpword ptr bx ; (8)mov ax,1000hadd
19、 ax,1 ;(9)mov ax,2000hmovbx,0000hjmpdword ptr bx; (10) ;code1 endscode2 segment ; 定义代码段2 assume cs:code2,ds:datastart: mov ax,datamov ds,axmov cx, 1234hjmpnear ptr next1 ;(1)addcx,1 ;(2)next1:movax,1010h;(3)jmp far ptr next ;(4) movdx,1234h;code2 endsend start【本程序从代码段2开始执行,为段内近转移,直接寻址方式,所以不执行,直接跳转到;
20、为段间远转移,直接寻址方式,IP和CS的内容均发生变化,CS变为NEXT所在的代码段地址,IP为NEXT段内偏移地址,程序跳转到】实验四 字符串拷贝 实验目的 1. 掌握字符串操作指令;2. 掌握汇编程序中简单循环程序设计的方法。 预习与实验要求 1复习教材相关内容,复习字符串操作指令;2复习控制转移指令:循环指令和条件转移指令;3回顾循环程序设计的基本方法,以及需要注意的问题;4实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。 实验原理 1字符串传送指令格式为MOV
21、S DST, SRCMOVSB MOVSW 其中MOVS需要在指令中指定类型,MOVSB表示对字节进行操作,MOVSW对字进行操作。该指令执行操作:(1) (DI) (SI)(2) 字节操作:(SI)(SI)1, (DI)(DI)1 字操作: (SI)(SI)2, (DI)(DI)2方向标志 DF=0 时用 + ,DF=1 时用 - 2设置方向标志指令:CLD、STDCLD置DF=0,STD置DF=13MOVS可与REP前缀配合工作 REP MOVS执行操作:(1) 如 (CX)=0 则退出 REP,否则转(2)(2) (CX) (CX) -1(3) 执行 MOVS (4) 重复 (1) (3
22、)4REP与MOVS配合工作可把数据段中SI指向的源串复制到附加数据段中DI指向的目的串。5循环指令LOOP可以用来执行简单的循环程序,可以在循环体中逐一复制字符串中的每一个元素。6LOOP指令默认使用CX计数器,可以用条件转移指令来实现它的功能LOOP NEXT DEC CX JNZ NEXT实验内容 1 定义一个字符串数组和三个空的字节型数组;2 采用寄存器相对寻址方式,将字符串数组中的字符按顺序拷贝到空数组1中;3 采用基址变址寻址方式,将字符串数组中的字符按顺序拷贝到空数组2中;4 采用字符串传送指令,将字符串数组中的字符按顺序拷贝到空数组3中;5 第2步和第3步,要求分别使用循环指令
23、和条件转移指令。实验报告 1 根据实验要求,设计程序,在源程序中用(1)、(2)、(3)进行标注,并在指令后面注明该段指令所使用的拷贝方式;2 用Debug调试程序,用U指令进行反汇编,查看指令地址,或者输出.lst文件,查看编译之后的源程序。3 跟踪程序运行情况,可通过G指令设置断点,每用一种方法拷贝之后,用D指令查看存储单元内容。4比较3种不同的拷贝方法,总结自己的实验心得。 思考题 1 REP和LOOP都使用哪个寄存器作为默认计数器?2 空数组3需要定义在哪个段中,为什么?3 比较3种拷贝方法的优缺点。附:示例程序eg04.asmdata segment mess db personal
24、_computer$mess1 db 18 dup(?)mess2 db 18 dup(?)data endsextra segment mess3 db 18 dup (?)extra endscode segmentassume cs:code, ds:data, es:extrastart:mov ax, datamov ds, axmov ax, extramov es, axmov si,0 ;(1)用寄存器相对寻址方式拷贝mov cx,18next1: mov al,messsimov mess1si,alinc siloop next1mov bx,offset mess ;(2
25、)用基址变址寻址方式拷贝mov si,0mov cx,18next2: mov al,bxsimov mess2si,alinc sidec cxjnz next2lea si, mess ;(3)用字符串传送指令拷贝lea di, mess3mov cx, 18cldrep movsbmov ah,4chint 21hcode endsend start实验五 表格查找 实验目的 1 熟悉循环程序和分支程序设计方法;2 了解与键盘输入有关的DOS 21H功能调用;3 了解DOS显示功能调用。 预习与实验要求 1复习控制转移指令:循环指令、无条件转移指令和条件转移指令;2复习教材相关内容,回顾
26、循环程序和分支程序设计的基本方法,以及需要注意的问题;3. 实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。 实验原理 1 循环程序和分支程序可用LOOP及J*指令实现,注意循环结束条件。2 与键盘输入有关的DOS 21H功能AHA:从键盘读入一串字符串并把它存入用户定义的缓冲区中。DS:DX缓冲区首地址;缓冲区第一个字节保存最大字符数,由用户程序给出。第二个字节是实际输入字符的个数,由功能A填入。在这两个字节之后,字符串按字节存入缓冲区。例:lea dx,stokn
27、inmovah,0ahint 21h3 DOS显示功能调用AH9:显示字符串要求:DS:DX串地址;被显示输出的字符串必须以$结束。例:leadx,mess1movah,09int 21h实验内容 仓库管理中,总共存有有关库存品的编号、名称、数量、价格等情况的表格,根据用户提供的编者按号可以找到有关材料。假设表格中共有6种库存品,表格的格式为:stoktabdb05, Excavators db08, Liftersdb09, Pressesdb12, Valvesdb23, Processorsdb27, Pumps试编写一程序,根据用户提供的编号在终端上显示其名称。根据题目的要求,程序可由
28、三部分组成:1. 输入:接受用户键入的库存品号;2. 查表:根据给定编号在表格中查找所要求的库存品名称;3. 输出:显示找到的库存品名称。其中,第二部分是程序的主体,可以使用循环结构。由于在给定的表格中,编号及库存品所占的字节数都是相等的,因此在查找的时候,只要根据编号的地址就可以逐项查找。循环结束条件应该是找到用户所指定的项时就可以退出,但还必须考虑在表格中没有找到所需编号的特殊情况。要求:如用户给出的编号可以在表格中查到,则显示出相应的库存品名;如用户不需要再查找,只要按一下“回车”可结束程序;若表格中无用户给出的编号,则显示:“Not in table!”,然后结束程序。实验报告 1 根
29、据实验要求,设计程序,程序由输入、查表、输出三部分构成;2 利用记事本输入源程序,经过MASM汇编检查语法后,得到OBJ文件,利用LINK连接程序生成EXE文件。3. 执行程序,写出程序运行情况。 思考题 1. 若要求当表格中无用户给出的编号,则显示:“Not in table!”,然后不结束程序,继续输出“stock number”提示用户继续查找,可以怎样实现?2. 思考:若表格中,编号及库存品所占的字节数不相等该怎样实现程序?3. 思考:汇编语言的表格查找实现与高级语言(C、C+等)有什么异同。附:示例程序eg05.asmdata segmentmess1db stock number?
30、,13,10,$ stoknin label bytemax db3act db?stokndb3 dup(?)stoktabdb05, Excavatorsdb08, Liftersdb09, Pressesdb12, Valvesdb23, Processorsdb27, Pumpsdescrn db14 dup(20h),13,10,$messdbNot in table!,13,10,$data endscode segmentassume cs:code, ds:data, es:datamain proc farpush dssub ax,axpush axmov ax, data
31、mov ds, axmov es, axstart:leadx,mess1movah,09int 21hlea dx,stokninmovah,0ahint 21hcmpact,0jeexitmov al,stoknmov ah,stokn+1movcx,06lea si,stoktaba20:cmpax,word ptrsijea30addsi,14loopa20leadx,messmovah,09int 21hjmpexita30:mov cx,07leadi,descrnrepmovswleadx,descrnmovah,09int 21hjmpstartexit:retmain end
32、pcode endsend main实验六 过程调用 实验目的 掌握汇编程序设计中过程(子程序)设计方法。预习与实验要求 1复习教材相关内容,回顾子程序设计方法;2复习子程序的参数传递方法,以及需要注意的问题;3. 实验前认真听讲,服从安排。尽可能独立思考并完成实验。实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。实验原理 子程序又称为过程,相当于高级语言中的过程和函数。在一个程序的不同部分,往往要用到“类似”的程序段,即这些程序段的功能和结构形式都相同,只是某些变量赋值不同。此时就可以把这些程序段写成子程序形式,以便需
33、要时调用它。例如:十进制数转换成二进制数;二进制数转换为十六进制数并显示输出等,都可以设计成子程序的形式。调用程序在调用子程序时,经常需要传送一些参数给子程序;子程序运行完后也经常要回送一些信息给调用程序。这种调用程序和子程序之间的信息传送称为参数传送。参数传送方式可以有以下一些方法:(1)通过寄存器传送参数(2)如过程和调用程序在同一源文件(同一程序模块)中,则过程可直接访问模块中的变量。(3)通过地址表传送参数地址(4)通过堆栈传送参数或参数地址实验内容 利用过程实现内存中压缩BCD码数据的输出。要求:1 PROC伪指令带参数定义子程序2 使用CALL指令调用子程序3 使用堆栈传送参数实验
34、报告 1根据实验要求,设计程序;2利用记事本输入源程序,经过MASM汇编检查语法后,得到OBJ文件,利用LINK连接程序生成EXE文件;3. 执行程序,写出程序运行情况。 思考题 1 思考:通过堆栈传送参数,需要注意些什么?2 思考:比较汇编语言的参数传递与高级语言(C、C+等)有什么异同。附:示例程序eg06.asmdata segment;定义数据段Xdb12h,34hdata ends stack segment stack;定义堆栈段Ydw100 dup(?)stack ends code segmentassume cs:code,ds:data,ss:stackmain proc
35、farstart:push dssubax,axpushax; 程序结束,返回操作系统 movax,datamovds,ax ;数据段初始化 movsi,0mov cx,2next:mov al,Xsimovah,alpushcxmov cl,4shrah,clandal,0fh; 将压缩的BCD码数分解到AX寄存器中pushaxmovbp,sp; 通过堆栈传送数据calldisp; 输出BCD码数据callcrlf; 输出回车换行 incsipopcxpopcx loopnextretmain endpdispprocnearmov dx,bp; 取参数movdi,2again:xchgdh
36、,dladd dl,30hmovah,2int21hdec dijnz againretdispendpcrlfprocnearmovdl,13movah,2int 21hmovdl,10movah,2int 21hretcrlf endpcodeendsendstart实验七 分类统计字符个数 实验目的 综合掌握汇编程序设计方法。预习与实验要求 1复习与键盘输入有关的DOS 21H功能调用;2. 复习DOS显示功能调用;3. 实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK
37、连接器。实验原理 1 计算机中字符以ASCII码的形式存储,DOS 21H的0AH功能调用可以把键入字符直接送到缓冲区中,然后再逐个取出分类计数。也可以采用01H功能调用,在接收字符后,先分类计数,然后再存入缓冲区中。2 程序需进入debug运行并查看计数结果。实验内容 程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类统计数, 然后将结果存入以letter、digit和other为名的存储单元中。实验报告 1根据实验要求,设计程序;2利用记事本输入源程序,经过MASM汇编检查语法后,得到OBJ文件,利用LINK连接程序生成EXE文件;3.
38、执行程序,写出程序运行情况。 思考题 思考:采用0AH功能调用和01H功能调用,在程序实现上有什么不同? 附:示例程序eg07a.asm(0AH功能调用)附:示例程序eg07a.asm(0AH功能调用)SHUJU SEGMENTSTR DB 80,?,80 DUP(?)LETTER DB 0DIGIT DB 0OTHER DB 0SHUJU ENDS;定义数据段DAIMA SEGMENTASSUME CS:DAIMA,DS:SHUJUMAIN ? PROC ? FARGO: PUSH DS XOR AX,AXPUSH AX;程序结束,返回操作系统MOV AX,SHUJUMOV DS,AX ;数
39、据段初始化LEA DX,STRMOV AH,10INT 21H;输入字符串,以回车结束 LEA SI,STR+2;SI指向实际输入的字符串首地址MOV CL,SI-1;实际字符串长度送到CXMOV CH,0REPEAT:MOV AL,SICMP AL,0JB RESTCMP AL,9;是否是数字JBE NUMCMP AL,AJB RESTCMP AL,Z;是否是大写字母JBE CHARCMP AL,aJB RESTCMP AL,z;是否是小写字母JA RESTCHAR:INC LETTER;字母JMP NEXTREST:INC OTHER;其他字符JMP NEXTNUM:INC DIGIT;数字NEXT:INC SILOOP REPEATRETMAIN ENDPDAIMAENDSEND GO示例程序eg07b.asm (01H功能调用)datasegment letterDB0digitDB 0other DB 0 countDW 80data ends code segmentmain proc far assume cs:code, ds;datastart: push ds sub ax,ax push ax mov ax,data mov