24个汇编实例小程序_第1页
24个汇编实例小程序_第2页
24个汇编实例小程序_第3页
24个汇编实例小程序_第4页
24个汇编实例小程序_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、24 个汇编小程序题目列表:逆序输出字符串“BASED ADDRESSIN” G从键盘上输入两个数,分别放到x, y 单元,求出它们的和试编写一段程序,要求在长度为10h 的数组中,找出大于42h 的无符号数的个数并存入地址为 up 开始区域,找出小于42h 的无符号数的个数并存入地址为down 的开始区域键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符把一个包含20个数据白数组 M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来求出首地址为data 的 100 个字数组中的最小偶

2、数,并把它放在ax 中输入两船字符串string1 和 string2 ,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match ”从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果有一个首地址为mem勺100个字的数组,试编程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零从键盘上输入一串字符(用回车键结束,使用 10 号功能调用)放在 string 中,是编制一个程序测试字符串中是否存在数字。如有,则把cl 的第五位置1 ,否则将该位置置0在首地址为d

3、ata 的字数组中,存放了100h 的 16 位字数据,试编写一个程序,求出平均值放在 ax 寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx 寄存器中(f 分别考虑有符号数、无符号数情况)一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序, 把既在A中又在B中出现的整数存放于数组C中设在A、 B 和 D 单元中分别存放着三个数。若三个数都不是0, 则求出三个数的和并存放在S单元,若其中有一个数为0,则把其它两个单元也清零。请编写此程序从键盘输入一系列字符(以回车键结束),并按字母、数字和其他字符分类计数,最后显示这三类的计数结果已定义两个整数变量A

4、和B,试编写程序完成以下功能( 1 )若两个树种有一个是奇数,则将奇数存入A 中,偶数存入B 中( 2)若两个数均为奇数,则将两个数加1 后存回原变量( 3)若两个数均为偶数,则两个变量均不变写一段子程序skiplines ,完成输出空行的功能。空行的行数由用户在主程序过键盘输入,并将行数放在ax 寄存器中设有 10 个学生成绩分别是76, 69 , 84, 73, 88, 99, 63, 100 和 80。试编写一个子程序统计 60-69 分, 70-79 分, 80-89 分, 90-99 分和 100 分的人数,并分别放到S6, S7, S8,S9, S10 单元中编写子程序嵌套结构的程

5、序,把整数分别用二进制和八进制显示出来在 D 盘根目录建立一个文件,第一次向文件写入“ 123456” 六个字符,第二次增加“ abcdefg几个字符从键盘上输入文本文件:“ ”的容后,然后新建一个文件“”,把前一个文件的所有容复制到后一个文件中从键盘上输入一个十进制数,以十六进制数显示出来。要求子程序用寄存器参数传送方法试编制一个程序,把bx 寄存器中的二进制数用十六进制数的形式在屏幕上显示出来代码:1. 逆序输出字符串“BASED ADDRESSIN” Gs1segment stack定义栈段s1top s1dw 100 dup() ;label word ;topendss2S2segm

6、ent;db BASED ADDRESSING,$ ;ends定义栈空间为100指向栈顶定义数据段s2定义字符串ss3定义代码段s3segmentassume cs:s3,ds:s2,ss:s1main proc farmovax,s1;栈初始化movss,axleasp,top; 栈初始化movax,s2;数据段初始化movds,ax; 数据段初始化movsi,15l: movdl,ssi;dl 获取字符串s 的最后一个(从零开始的第十五个字符)movah,2; 调用int 21h 2 号功能输出dl 上的值int21hdecsi;寄存器减一,准备获取下一个字符cmpsi,0jalmovah

7、,4ch;终止int21hmain endps3 endsendmain2. 从键盘上输入两个数,分别放到上输入两个数,分别放到x, y 单元,求出它们的和s1 segment stackdw 100h dup() top label word s1 endss2segmenth1dbPlease input x:,$ ;提示输入h2dbPlease input y:,$ ;提示输入h3dbz=x+y:,$;提示输出crlfdb0dh,0ah,24h;定义回车换行xdwydws2endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,

8、s1 ;初始化mov ss,ax lea sp,top mov ax,s2leadx,h1;int 21h 9号功能输出“提示输入 X”的字符串movah,9int21hxorbx,bx;bx清零,即把bx 置零InputX:movah,1;输入一个字符int21hcmpal,0dh;判断时候为“回车”字符jzexit1;如果是回车字符就跳转到eXit1cmpal,30h;和30h (即字符0的asii值)比较jlexit1; 如果输入字符小于0 ,跳转到eXit1cmpal,39h;和39h(即字符9的ascii值)比较jgexit1;如果输入字符大于9 ,跳转到eXit1subal,30h

9、;al减去30h, 输入字符转化成数字(从这一行开始到后面的 add bx,ax 为输入字符转化为数字的处理方法)cbw;al扩充为aXxchgax,bxmovcx,10mulcxxchgax,bxaddbx,ax;sub al,30h开始到这一行为输入字符转化为数字的处理方法jmpInputXexit1: mov x,bx;把输入的存于bX 的放到X 中leadx,crlfmovah,9int21hleadx,h2movah,9int21hxorbx,bxInputY:;和 InputX 类似,输入ymovah,1int21hcmpal,0dhjzexit2cmpal,30hjlexit2J

10、初始化mov ds,axcmpal,39hjgexit2subal,30hcbwxchgax,bxmovcx,10mulcxxchgax,bxaddbx,axjmpInputYexit2: mov y,bx把输入的存于bx 的放到 y 中mov bx,xaddbx,yleadx,crlfmovah,9int21Hleadx,h3movah,9int21hxorsi,simovax,bxmovcl,10divclmovdl,ahmovdh,0pushdxincsimov ah,0cmpal,0jnzl4popdxadddl,30hmovah,2int21hdecsicmpsi,0jnzl5J;s

11、iJl4:Jl5:JJJ此时 bx 为两数加和清零,用作计数把和放到ax 上把和连续除以10 知道和变为零,余数依次进栈重要,不能漏写余数依次出栈 余数转换为显示的余数字符 输入余数字符mov ah,4chint 21Hmain endps3 endsend main3. 是编写一段程序,要求在长度为10 的数组中,找出大于42h 的无符号数的个数并存入地址为 up 开始区域,找出小于42h 的无符号数的个数并存入地址为down 的开始区域,并分别显示up、down数组的个数和数组的数字s1 segment stackdw 100h dup()top label words1 endss2 s

12、egmenth1 db the num of up array and the up array are(prints in decimalism) :,$h2 db the num of down array and the down array are(prints in decimalism) :,$ crlf db 0dh,0ah,24harray db0,50h,11h,61h,22h,72h,33h,73h,41h,74h,$; 定义数组arrayup db 10 dup();定义 up 数组down db 10 dup(); 定义 down 数组s2 ends s3 segmen

13、tassume cs:s3,ds:s2,ss:s3 main proc farmovax,s1movss,axleasp,topmovax,s2movds,axmovsi,0movdi,1movbp,1repeat: cmp arraysi,42h ;把array 数组中小于 42h的值放到down数组里,大于 42h 的值放到up 数组里面jb downarray mov dl,arraysi mov upbp,dl inc si cmp si,10jz exit1 inc bp jmp repeatdownarray:mov dl,arraysi mov downdi,dl inc sic

14、mp si,10jz exit2 inc di jmp repeatexit1:sub di,1jmp exitexit2:sub bp,1把分配好的up 数组和 down 数组在其有效数字后面添加exit: mov dx,bp ;$ ,便于后面的输出结束mov up0,dlinc bpmov upbp,$ mov dx,di mov down0,dl inc dimov downdi,$mov cl,10mov si,0lea dx,h1mov ah,9 int 21hPrintUparray: cmp upsi,$ jz next mov al,upsi call print inc si

15、jmp PrintUparraynext:lea dx,crlfmov ah,9int 21hlea dx,h2int 21hxor si,siPrintDownArray:cmp downsi,$jz atendmov al,downsicall printinc sijmp PrintDownArrayprint proc near ;print为输出十进制输出某个数的子程序mov di,0rediv: mov ah,0div clmov dl,ahmov dh,0push dxinc dicmp al,0jnz redivbreak: pop dxadd dl,30hmov ah,2in

16、t 21hdec dicmp di,0jnz breakmov dl, mov ah,2int 21Hretprint endpatend: mov ah,4chint 21Hmain endps3 endsend main4. 键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出51 segment stackdw 100h dup()top label words1 ends52 segmenth1 db Please input a string:,$ h2 db The changed string is:,$ crlf db 0dh,0ah,24htemp dbs2 en

17、ds53 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,ax lea sp,top mov ax,s2mov ds,axlea dx,h1mov ah,9 int 21hmov si,0l: mov ah,1int 21hcmp al,0dhjz exit cmp al,a jl putin cmp al,z jg putin sub al,20h ; 把小写字符变为大写字符putin:mov tempsi,al ; 把字符放到temp 数组里inc si jmp lexit: lea dx,crlf ;输出 tmp 数

18、组mov ah,9int 21hlea dx,h2mov ah,9int 21hinc simov tempsi,$lea dx,tempmov ah,9int 21hmov ah,4ch int 21H main endp s3 endsend main5. 从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符51 segment stack dw 100h dup()top label words1 ends52 segmenth1 db Please input a lowercase: ,$ h2 db The the three chars are: ,$ cr

19、lf db 0dh,0ah,24h s2 ends53 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,ax lea sp,top mov ax,s2 mov ds,axl: lea dx,h1 mov ah,9 int 21hmov ah,1int 21hcmp al,ajl lcmp al,zjg lmov cl,allea dx,crlfmov ah,9int 21Hlea dx,h2mov ah,9int 21hdec clmov dl,cl ;输出前导字符mov ah,2int 21hmov dl, mov ah

20、,2int 21hinc clmov dl,cl ;输出该字符mov ah,2int 21hmov dl, mov ah,2int 21hinc clmov dl,cl ;输出后导字符mov ah,2int 21hmov ah,4chint 21Hmain endps3 endsend main6.把一个包含20个数据的数组 M分成两组:正整数组 P和负整数组N,分别把这两个数组 中的数据的个数显示出来s1 segment stackdw 100h dup()top label words1 endss2 segmenth1 db the positive number is: ,$h2 db

21、 the negative number is: ,$crlf db 0dh,0ah,24harraydw50h,-11h,61h,-22h,72h,-33h,73h,-41h,74h,21h,67h,-90h,73h,77h,-1h,-89h,-11h,61h,-22h,20h,$s2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axmov bx,0mov si,0l: mov dx,arraysicmp dx,0jl addlow ;有符号数比较

22、用jladd si,2cmp si,40jz exitjmp laddlow: inc bxadd si,2cmp si,40jz exitjmp lleadx,h2movah,9int21hmovax,bxcallprintleadx,crlfmovah,9int21hleadx,h1movah,9int21hmov ax,20subax,bxcallprintjmpatendexit:打印数字字符的子程序print proc nearmov cl,10 mov si,0repeat: div cl mov dl,ah add dl,30h mov dh,0 push dx inc si m

23、ov ah,0 cmp al,0 jnz repeatl2: pop dx mov ah,2 int 21h dec si cmp si,0 jnz l2retprint endpatend: mov ah,4chint 21H main endps3 endsend main7. 打印输出首地址为data 的 20 个字数组中的最小偶数51 segment stackdw 100h dup()top label words1 ends52 segmenth1 db the min even number is: ,$crlf db 0dh,0ah,24hdwdata50,-11,61,-22

24、,72,-33,73,-41,74,21,67,-90,73,77,-1,-89,-11,61,-22,20,$s2 ends53 segmentassume cs:s3,ds:s2,ss:s1main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axmov bx,65534 ;bx存最小数,初始令最小值置为65534mov si,0mov cl,100mov dl,2l2: mov ax,datasicmp ax,0jnl l4neg ax ;如果是负数,则求补14: div clmov al,ahmov ah,0div dl cm

25、p ah,0 jnz l1cmp bx,datasi ;jl l1 ;mov bx,datasi ;比较最小值和数组中的每个数如果数组中的数大于最小值跳转到l1如果数组中的数小于最小值则将其赋给最小值l1: add si,2cmp si,40jz exitjmp l2exit: lea dx,h1mov ah,9int 21hcmp bx,0jnl l5neg bxmov dl,-mov ah,2int 21h15: mov ax,bxcall print ;调用子程序输出最小值jmp atendprint proc nearmov cl,10mov si,0repeat: div clmov

26、 dl,ahadd dl,30hmov dh,0push dxinc simov ah,0cmp al,0jnz repeat13: pop dx mov ah,2 int 21h dec si cmp si,0 jnz l3ret print endpatend: mov ah,4ch int 21Hmain endps3 endsend main8. 输入两船字符串string1 和 string2 , 并比较两个字符串是否相等,相等就显示“ match”,否则显示“no match ”s1segment stackdw 100h dup()top label words1 endss2

27、segmenth1dbPlease input the first string: ,$h2dbPlease input the second string: ,$h3 db MATCH,$h4 db NO MATCH,$crlf db 0dh,0ah,24hstr1 db50,50 dup($)str2 db50,50 dup($)s2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,ax lea sp,top mov ax,s2mov ds,axlea dx,h1 mov ah,9 int 21hlea

28、dx,str1 mov ah,0ah int 21hlea dx,crlf mov ah,9 int 21hlea dx,h2int 21hlea dx,str2 mov ah,0ah int 21hlea dx,crlf mov ah,9 int 21hmovdl,str1+1;str1+1为 str1实际的字符个数cmpdl,str2+1;str2+1为 str2实际的字符个数jnzlmovsi,2movdl,str1sicmpdl,str2sijnzlincsicmpsi,50jzl3jmpl2leadx,h4 ;输出不匹配信息movah,9int21hleadx,h3 ;输出匹配信息m

29、ovah,9int21hl2:l:l3:mov ah,4ch int 21Hmain endps3 endsend main9. 从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数s1 segment stack dw 100h dup()top label words1 endss2 segmenth1dbPlease input a hexadecimal number: ,$h2dbThe number is printed in binary number: ,$temp db 17 dup($) crlf db 0dh,0ah,24h s2 endss3 segmenta

30、ssume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,ax lea sp,top mov ax,s2 mov ds,axrepeat: lea dx,h1mov ah,9int 21hmov bx,0mov cx,4newchar:;接收新字符mov ah,1int 21hcmp al,30h jb repeatcmp al,46hjg repeat cmp al,39h jnb l1 ; sub al,30h jmp l211: cmp al,41h jb repeat ; sub al,37h ; jmp l212: cbw;l2xchg

31、ax,bx mov dx,10h mul dx xchg ax,bx add bx,ax ;loop newchar dec cxcmp cx,0 jnz newcharlea dx,crlf mov ah,9 int 21h lea dx,h2 int 21hmov si,0mov cx,10h ;cxl5: rol bx,1 ;bx jc l3 ;mov tempsi,0 jmp l413: mov tempsi,1 l4: inc siloop l5lea dx,temp mov ah,9 int 21h如果输入字符大于9 跳到 l1如果输入字符小于 A,则输入错误,跳到输入字符为AZ,

32、故相应地要减37h为把输入字符转化为数值作计数器,即待会要循环16 次循环左移以为,最高位进标志位若标志位为1 则跳转到l3repeatmov ah,4chint 21H main endps3 endsend main10 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果51 segment stack dw 100h dup()top label words1 ends52 segmenth1dbPlease input a string: ,$h2dbThe number of the chars that is not digit:,$crlf db 0

33、dh,0ah,24h s2 ends53 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,ax lea sp,top mov ax,s2mov ds,axlea dx,h1mov ah,9 int 21hmov cx,0l2: mov ah,1int 21h cmp al,$ jz exit cmp al,30hjb lcmp al,39hjnb ljmp l2l: inc cxjmp l2 exit: lea dx,crlfmov ah,9int 21hlea dx,h2int 21hmov si,0mov bl,10m

34、ov ax,cx14: div blmov dl,ahmov dh,0push dxinc simov ah,0cmp al,0jnz l415: pop dxadd dl,30hmov ah,2int 21hdec sicmp si,0jnz l5mov ah,4chint 21Hmain endps3 endsend main并将后续项11.有一个首地址为 mem勺10个字的数组,试编程序删除数组中所有为零的项, 向前压缩,最后将数组的剩余部分补上零s1 segment stackdw 100h dup()top label words1 ends s2 segmentmem dw 0,1

35、,0,3,0,0,4,5,6,0,$crlf db 0dh,0ah,24hs2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,ax lea sp,top mov ax,s2 mov ds,axmov si,0mov di,2repeat: cmp di,20 jz exit mov bx,memsi mov dx,memdicmp bx,0 jnz next xchg bx,dxmov memsi,bx mov memdi,dxnext:cmp memsi,0jz l add si,2l: add di,2

36、 jmp repeatexit: mov ah,4ch int 21Hmain endps3 ends end main; 以下是该算法描述; 定义两个指针,当前指针si 和检查指针di ,先把 si 指针指向第一个字得到的值bx,;di指向第二个字得到的值dx。若bx为0, di自力口 2,否则,则交换这两字,; 若此时 si 指向字为0,则di, 否则, di , si 都自己加2。如此循环直到di 指向最后一个; 这样就把所有非零字至于前面了。string 中,是编制1,否则将该位置置012. 从键盘上输入一串字符(用回车键结束,使用10 号功能调用)放在一个程序测试字符串中是否存在数字

37、。如有,则把cl 的第五位置s1 segment stack dw 100h dup()top label words1 endss2 segmenth1dbPlease input a string: ,$h2dbcx: ,$crlf db 0dh,0ah,24hstring db 50,50 dup($)s2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,ax lea sp,top mov ax,s2mov ds,axand cl,0dfh ; 先假设无数字,置0lea dx,h1 mov ah,9 i

38、nt 21h lea dx,stringmov ah,10d int 21hmov si,212: cmp stringsi,$ jz exitmov dl,stringsicmp dl,30h jb lcmp dl,39hjnb lor cl,20h ; 有数字,置1jmp exitl: inc sijmp l2exit: lea dx,crlf mov ah,9 int 21h lea dx,h2 int 21hmov ax,cx call print jmp atendprint proc nearmov cl,10 mov si,0repeat: div cl mov dl,ah ad

39、d dl,30h mov dh,0 push dx inc simov ah,0 cmp al,0 jnz repeat13: pop dx mov ah,2 int 21h dec si cmp si,0 jnz l3retprint endp atend: mov ah,4chint 21Hmain endps3 endsend main13. 在首地址为data 的字数组中,存放了 10 个 16 位字数据,试编写一个程序,求出平均值放在 ax 寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx 寄存器中(f 分别考虑有符号数、无符号数情况)s1 segment stack d

40、w 100h dup()top label words1 endss2 segmentdata dw -1,0,1,-2,2,3,-3,-4,4,15,$ crlf db 0dh,0ah,24h s2 endss3 segmentassume cs:s3,ds:s2,ss:s3 main proc farmov ax,s1mov ss,ax lea sp,top mov ax,s2mov ds,axmov si,0mov ax,0l3: cmp datasi,$ jz exitmov dx,datasicmp dx,0jnl l1neg dx sub ax,dxjmp l211: add ax

41、,dx12: add si,2 jmp l3exit: mov cl,10 ;平均值放到ax 中div clmov ah,0 mov si,0 mov bx,015: cmp datasi,$ ;小于平均值的数的个数放到bx 中jz exit2 cmp ax,datasijz l6jl l6 inc bx16: add si,2 jmp l5exit2: mov ah,4ch int 21Hmain endps3 ends end main14.一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在 A中又在B中出现的整数存放于数组C中并显示C中的数值; 两

42、层循环比较得出两个数组中相同的数值s1 segment stack dw 100h dup()top label words1 endss2 segmentdwa dw 1h,2h,3h,4h,5h,6h,7h,8h,9h,10h,11h,12h,13h,14h,15h,$ b21h,22h,23h,24h,25h,6h,18h,19h,10h,11h,12h,34h,14h,53h,31h,32h,33h,36h,7h,67h, $c dw 16 dup($) crlf db 0dh,0ah,24hs2 endss3 segment assume cs:s3,ds:s2,ss:s3main

43、proc farmovax,s1movss,axleasp,topmovax,s2movds,axmov si,0 mov di,0 mov bp,0l4: cmp di,40jz l2jmp l312: add si,2cmp si,30jz exit mov di,013: mov ax,asi mov bx,bdi cmp ax,bx jnz lmov cbp,ax add bp,2l: add di,2 jmp l4exit: mov bp,0l6: cmp cbp,$jz atend mov ax,cbp call print add bp,2 mov dl, mov ah,2 in

44、t 21h jmp l6print proc nearmov cl,10repeat: div cl mov dl,ah add dl,30h mov dh,0 push dx inc si mov ah,0 cmp al,0 jnz repeatl5: pop dx mov ah,2 int 21h dec si cmp si,0 jnz l5ret print endpatend: mov ah,4ch int 21Hmain endps3 ends end main15.设在A、B和D单元中分别存放着三个数。若三个数都不是0,则求出三个数的和并存放在 S 单元,若其中有一个数为0,则把其

45、它两个单元也清零。请编写此程序s1 segment stackdw 100h dup() top label word s1 endss2 segment adw1h,$bdw-11h,$ddw0h,$sdw2dup($)crlf db 0dh,0ah,24hs2 endss3 segmentassume cs:s3,ds:s2,ss:s3 main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axmov ax,a0mov bx,b0mov dx,d0cmp ax,0jz lcmp bx,0jz lcmp dx,0jz lmov cx

46、,0cmp ax,0 jnl add_ax neg ax ; 减法需先求补 sub cx,ax jmp l2add_ax: add cx,ax12: cmp bx,0jnl add_bxneg bxsub cx,bxjmp l3add_bx: add cx,bx13: cmp dx,0jnl add_dxneg dxsub cx,dxjmp l4add_dx: add cx,dx14: mov s0,cxjmp exitl: mov a0,0 mov b0,0mov d0,0exit:mov ah,4chint 21Hmain endps3 endsend main最后显16. 从键盘输入一系

47、列字符(以回车键结束),并按字母、数字和其他字符分类计数,示这三类的计数结果51 segment stack dw 100h dup()top label words1 ends52 segmentletter db the number of letter: ,$digit dbthe number of digit: ,$others dbthe number of other chars: ,$crlf db 0dh,0ah,24h s2 ends53 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,ax lea s

48、p,top mov ax,s2 mov ds,axmov bx,0mov cx,0mov dx,0repeat: mov ah,1int 21hcmp al,0dh jz exitcmp al,30hjb count_otherscmp al,zjnb count_otherscmp al,39hjb count_digitcmp al,Ajb count_otherscmp al,Zjb count_lettercmp al,ajb count_othersjmp count_lettercount_letter:inc bxjmp repeatcount_digit:inc cxjmp r

49、epeatcount_others:inc dxjmp repeatexit:push cxpushdxcallprint_crlflea dx,lettermov ah,9int 21hmov ax,bxcallprint_axcallprint_crlflea dx,othersmov ah,9int 21hpop dx ; 栈,后进先出,先进后出mov ax,dxcallprint_axcallprint_crlflea dx,digitmov ah,9int 21hpop cx ;print_ax 会修改 cx 的值 , 故要先把cx 进栈mov ax,cxcallprint_axjmp exit2print_crlfprocnearlea dx,crlfmov ah,9int 21hretprint_crlf endpprint_ax proc ne

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论