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

下载本文档

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

文档简介

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

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

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

4、偶数存入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单元中编写子程序嵌套结构的程序,把整数分别用二进制和八进制显示出来在D盘根目录建立一个文件abc.txt,第一次向文件写入“123456”六个字符,第二次增加“ab

5、cdefg”几个字符从键盘上输入文本文件:“d:temp.txt”的内容后,然后新建一个文件“d:temp2.txt”,把前一个文件的所有内容复制到后一个文件中从键盘上输入一个十进制数,以十六进制数显示出来。要求子程序用寄存器参数传送方法试编制一个程序,把bx寄存器中的二进制数用十六进制数的形式在屏幕上显示出来代码:1.逆序输出字符串“BASED ADDRESSING”s1 segment stack ;定义栈段s1 dw 100 dup(?) ;定义栈空间为100top label word ;top指向栈顶s1 endss2 segment ;定义数据段s2s db 'BASED

6、ADDRESSING','$' ;定义字符串sS2 endss3 segment ;定义代码段s3 assume cs:s3,ds:s2,ss:s1main proc far mov ax,s1 ;栈初始化 mov ss,ax lea sp,top ;栈初始化 mov ax,s2 ;数据段初始化 mov ds,ax ;数据段初始化 mov si,15l: mov dl,ssi ;dl获取字符串s的最后一个(从零开始的第十五个字符) mov ah,2 ;调用int 21h 2号功能输出dl上的值 int 21h dec si ;寄存器减一,准备获取下一个字符 cmp si

7、,0 ja l mov ah,4ch ;终止 int 21hmain endps3 ends end main2.从键盘上输入两个数,分别放到x,y单元,求出它们的和s1 segment stack dw 100h dup(?)top label words1 endss2 segmenth1 db 'Please input x:','$' ;提示输入h2 db 'Please input y:','$' ;提示输入h3 db 'z=x+y:','$' ;提示输出crlf db 0dh,0ah,2

8、4h ;定义回车换行x dw ?y dw ?s2 endss3 segment assume cs:s3,ds:s2,ss:s3main proc far mov ax,s1 ;初始化 mov ss,ax lea sp,top mov ax,s2 mov ds,ax ;初始化 lea dx,h1 ;int 21h 9号功能输出“提示输入x”的字符串 mov ah,9 int 21h xor bx,bx ;bx清零,即把bx置零InputX: mov ah,1 ;输入一个字符 int 21h cmp al,0dh ;判断时候为“回车”字符 jz exit1 ;如果是回车字符就跳转到exit1 c

9、mp al,30h ;和30h(即字符0的asii值)比较 jl exit1 ;如果输入字符小于'0',跳转到exit1 cmp al,39h ;和39h(即字符9的ascii值)比较 jg exit1 ;如果输入字符大于'9',跳转到exit1 sub al,30h ;al减去30h,输入字符转化成数字(从这一行开始到后面的add bx,ax为输入字符转化为数字的处理方法) cbw ;al扩充为ax xchg ax,bx mov cx,10 mul cx xchg ax,bx add bx,ax ;sub al,30h开始到这一行为输入字符转化为数字的处理方法

10、 jmp InputX exit1: movx,bx ;把输入的存于bx的放到x中 lea dx,crlf mov ah,9 int 21h lea dx,h2 mov ah,9 int 21h xor bx,bxInputY: ;和InputX类似,输入y mov ah,1 int 21h cmp al,0dh jz exit2cmp al,30hjl exit2 cmp al,39h jg exit2 sub al,30h cbw xchg ax,bx mov cx,10 mul cx xchg ax,bx add bx,ax jmp InputYexit2: movy,bx ;把输入的存

11、于bx的放到y中movbx,x add bx,y ;此时bx为两数加和 lea dx,crlf mov ah,9 int 21H lea dx,h3 mov ah,9 int 21h xor si,si ;si清零,用作计数 mov ax,bx ;把和放到ax上 l4: mov cl,10 ;把和连续除以10知道和变为零,余数依次进栈 div cl mov dl,ah mov dh,0 push dx inc simovah,0 ;重要,不能漏写 cmp al,0 jnz l4 l5: pop dx ;余数依次出栈 add dl,30h ;余数转换为显示的余数字符 mov ah,2 ;输入余数

12、字符 int 21h dec si cmp si,0 jnz l5 mov ah,4ch int 21Hmain endps3 ends end main3.是编写一段程序,要求在长度为10的数组中,找出大于42h的无符号数的个数并存入地址为up开始区域,找出小于42h的无符号数的个数并存入地址为down的开始区域,并分别显示up、down数组的个数和数组内的数字s1 segment stack dw 100h dup(?)top label words1 endss2 segmenth1db'the num of up array and the up array are(print

13、s in decimalism) :','$'h2db'the num of down array and the down array are(prints in decimalism) :','$'crlf db 0dh,0ah,24harray db 0,50h,11h,61h,22h,72h,33h,73h,41h,74h,'$' ;定义数组arrayup db 10 dup(?) ;定义up数组 down db 10 dup(?) ;定义down数组s2 endss3 segment assume cs:s3,d

14、s:s2,ss:s3main proc far mov ax,s1 mov ss,ax lea sp,top mov ax,s2 mov ds,ax mov si,0 mov di,1 mov bp,1 repeat: cmp arraysi,42h ;把array数组中小于42h的值放到down数组里,大于42h的值放到up数组里面 jb downarray mov dl,arraysi mov upbp,dl inc si cmp si,10 jz exit1inc bp jmp repeatdownarray:mov dl,arraysi mov downdi,dl inc si cmp

15、 si,10 jz exit2inc di jmp repeatexit1:subdi,1jmpexitexit2:subbp,1exit: mov dx,bp ;把分配好的up数组和down数组在其有效数字后面添加'$',便于后面的输出结束 mov up0,dlincbpmov upbp,'$' mov dx,di mov down0,dlincdi mov downdi,'$' mov cl,10 mov si,0leadx,h1movah,9int21hPrintUparray: cmp upsi,'$' jz nextmo

16、val,upsi call print inc si jmp PrintUparraynext:leadx,crlfmovah,9int21hleadx,h2int21hxorsi,siPrintDownArray: cmp downsi,'$' jz atendmoval,downsi call print inc si jmp PrintDownArrayprint proc near ;print为输出十进制输出某个数的子程序 mov di,0rediv: mov ah,0 div cl mov dl,ah mov dh,0 push dx inc di cmp al,0

17、 jnz redivbreak: pop dx add dl,30h mov ah,2 int 21h dec di cmp di,0 jnz break mov dl,' ' mov ah,2 int 21H retprint endpatend:mov ah,4ch int 21Hmain endps3 ends end main4.键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出s1 segment stack dw 100h dup(?)top label words1 endss2 segmenth1 db 'Please input a st

18、ring:','$'h2 db 'The changed string is:','$'crlf db 0dh,0ah,24htemp db ?s2 endss3 segment assume cs:s3,ds:s2,ss:s3main proc far mov ax,s1 mov ss,ax lea sp,top mov ax,s2 mov ds,ax lea dx,h1 mov ah,9 int 21hmovsi,0l:movah,1int21hcmpal,0dhjzexitcmpal,'a'jlputincmpal,

19、'z'jgputinsubal,20h ;把小写字符变为大写字符putin:movtempsi,al ;把字符放到temp数组里 inc si jmp lexit: lea dx,crlf ;输出tmp数组 mov ah,9 int 21h lea dx,h2 mov ah,9 int 21h inc si mov tempsi,'$' lea dx,temp mov ah,9int21h mov ah,4ch int 21Hmain endps3 ends end main5.从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符s1 se

20、gment stack dw 100h dup(?)top label words1 endss2 segmenth1 db 'Please input a lowercase: ','$'h2 db 'The the three chars are: ','$'crlf db 0dh,0ah,24hs2 endss3 segment assume cs:s3,ds:s2,ss:s3main proc far mov ax,s1 mov ss,ax lea sp,top mov ax,s2 mov ds,axl: lea dx,h

21、1 mov ah,9 int 21hmovah,1int21hcmpal,'a'jllcmpal,'z'jgl mov cl,al lea dx,crlf mov ah,9 int 21Hleadx,h2movah,9int21h dec cl mov dl,cl ;输出前导字符 mov ah,2 int 21h mov dl,' ' mov ah,2 int 21h inc cl mov dl,cl ;输出该字符movah,2int21h mov dl,' ' mov ah,2 int 21h inc cl mov dl,cl

22、;输出后导字符 mov ah,2int21h mov ah,4ch int 21Hmain endps3 ends end main6.把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来s1 segment stack dw 100h dup(?)top label words1 endss2 segmenth1 db 'the positive number is: ','$'h2 db 'the negative number is: ','$'crlf db 0dh,0ah,

23、24harray dw 50h,-11h,61h,-22h,72h,-33h,73h,-41h,74h,21h,67h,-90h,73h,77h,-1h,-89h,-11h,61h,-22h,20h,'$'s2 endss3 segment assume cs:s3,ds:s2,ss:s3main proc far mov ax,s1 mov ss,ax lea sp,top mov ax,s2 mov ds,ax mov bx,0 mov si,0l: mov dx,arraysi cmp dx,0 jl addlow ;有符号数比较用jl add si,2 cmp si,4

24、0 jz exit jmp laddlow: inc bxadd si,2 cmp si,40 jz exit jmp lexit: lea dx,h2 mov ah,9 int 21h mov ax,bx call print lea dx,crlf mov ah,9 int 21h lea dx,h1 mov ah,9 int 21hmovax,20 sub ax,bx call print jmp atendprint proc near ;打印数字字符的子程序 mov cl,10 mov si,0repeat: div cl mov dl,ahadddl,30h mov dh,0 pu

25、sh dx inc simovah,0 cmp al,0 jnz repeatl2: pop dx mov ah,2 int 21h dec si cmp si,0 jnz l2 retprint endpatend: mov ah,4ch int 21Hmain endps3 ends end main7.打印输出首地址为data的20个字数组中的最小偶数s1 segment stack dw 100h dup(?)top label words1 endss2 segmenth1 db 'the min even number is: ','$'crlf d

26、b 0dh,0ah,24hdata dw 50,-11,61,-22,72,-33,73,-41,74,21,67,-90,73,77,-1,-89,-11,61,-22,20,'$'s2 endss3 segment assume cs:s3,ds:s2,ss:s1main proc far mov ax,s1 mov ss,ax lea sp,top mov ax,s2 mov ds,ax mov bx,65534 ;bx存最小数,初始令最小值置为65534 mov si,0movcl,100movdl,2l2: mov ax,datasi cmp ax,0 jnl l4

27、neg ax ;如果是负数,则求补l4: div cl mov al,ahmovah,0divdlcmpah,0jnzl1cmpbx,datasi ;比较最小值和数组中的每个数jll1 ;如果数组中的数大于最小值跳转到l1movbx,datasi ;如果数组中的数小于最小值则将其赋给最小值 l1:addsi,2cmpsi,40jzexitjmpl2exit: lea dx,h1 mov ah,9 int 21h cmp bx,0 jnl l5 neg bx mov dl,'-' mov ah,2 int 21hl5: mov ax,bx call print ;调用子程序输出最

28、小值 jmp atendprint proc near mov cl,10 mov si,0repeat: div cl mov dl,ahadddl,30h mov dh,0 push dx inc simovah,0 cmp al,0 jnz repeatl3: pop dx mov ah,2 int 21h dec si cmp si,0 jnz l3 retprint endpatend: mov ah,4ch int 21Hmain endps3 ends end main8.输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“

29、no match”s1 segment stack dw 100h dup(?)top label words1 endss2 segmenth1 db 'Please input the first string: ','$'h2 db 'Please input the second string: ','$'h3db 'MATCH','$'h4db'NO MATCH','$'crlf db 0dh,0ah,24hstr1 db 50,?,50 dup('

30、$')str2 db 50,?,50 dup('$')s2 endss3 segment assume cs:s3,ds:s2,ss:s3main proc far mov ax,s1 mov ss,ax lea sp,top mov ax,s2 mov ds,ax leadx,h1movah,9int21hleadx,str1movah,0ahint21hleadx,crlfmovah,9int21hleadx,h2int21hleadx,str2movah,0ahint21hleadx,crlfmovah,9int21h mov dl,str1+1 ;str1+1为

31、str1实际的字符个数 cmp dl,str2+1 ;str2+1为str2实际的字符个数 jnz l mov si,2l2: mov dl,str1si cmp dl,str2si jnz l inc si cmp si,50 jz l3 jmp l2l: lea dx,h4 ;输出不匹配信息 mov ah,9 int 21hl3: lea dx,h3 ;输出匹配信息 mov ah,9 int 21h mov ah,4ch int 21Hmain endps3 ends end main9.从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数s1 segment stack dw

32、100h dup(?)top label words1 endss2 segmenth1 db 'Please input a hexadecimal number: ','$'h2 db 'The number is printed in binary number: ','$'temp db 17 dup('$')crlf db 0dh,0ah,24hs2 endss3 segment assume cs:s3,ds:s2,ss:s3main proc far mov ax,s1 mov ss,ax lea s

33、p,top mov ax,s2 mov ds,axrepeat: lea dx,h1movah,9int21hmov bx,0 mov cx,4 newchar: ;接收新字符 mov ah,1 int 21h cmp al,30h jb repeat cmp al,46h jg repeat cmp al,39h jnb l1 ;如果输入字符大于9跳到l1 sub al,30h jmp l2l1: cmp al,41h jb repeat ;如果输入字符小于A,则输入错误,跳到repeat sub al,37h ;输入字符为AZ,故相应地要减37h jmp l2l2: cbw ;l2为把输入

34、字符转化为数值 xchg ax,bx mov dx,10h mul dx xchg ax,bx add bx,ax ;loop newchardeccxcmpcx,0jnznewchar lea dx,crlf mov ah,9 int 21h lea dx,h2 int 21h mov si,0 mov cx,10h ;cx作计数器,即待会要循环16次l5: rol bx,1 ;bx循环左移以为,最高位进标志位 jc l3 ;若标志位为1则跳转到l3 mov tempsi,'0' jmp l4l3: mov tempsi,'1'l4: inc si loop

35、l5 lea dx,temp mov ah,9 int 21h mov ah,4ch int 21Hmain endps3 ends end main10从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果s1 segment stack dw 100h dup(?)top label words1 endss2 segmenth1 db 'Please input a string: ','$'h2 db 'The number of the chars that is not digit:','$'crlf db 0dh,0ah,24hs2 endss3 segment assume cs:s3,ds:s2,ss:s3main proc far mov ax,s1 mov ss,ax lea sp,top mov ax,s2 mov ds,ax lea dx,h1movah,9int21h mov cx,0l2: mov ah,1 int 21h cmp al,'$' jz exit cmp al,30h jb l cmp al,39h jnb l jmp l2l: inc cx jmp l2exit: lea dx,crlf

温馨提示

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

评论

0/150

提交评论