24个汇编实例小程序_第1页
24个汇编实例小程序_第2页
24个汇编实例小程序_第3页
24个汇编实例小程序_第4页
24个汇编实例小程序_第5页
免费预览已结束,剩余55页可下载查看

下载本文档

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

文档简介

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

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

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

4、有一个就是奇数,则将奇数存入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单元中 编写子程序嵌套结构得程序,把整数分别用二进制与八进制显示出来 在D盘根目录建立一个文件abc、txt,第一次向文件写入

5、“123456”六个字符,第二次增加abcdefg”几个字符从键盘上输入文本文件:“d:temp、txt”得容后,然后新建一个文件“d:temp2、txt,把前一 个文件得所有容复制到后一个文件中从键盘上输入一个十进制数,以十六进制数显示出来。要求子程序用寄存器参数传送方法试编制一个程序,把bx寄存器中得二进制数用十六进制数得形式在屏幕上显示出来代码:toplabelword;top指向栈顶s1endss2segment;定义数据段s2sdbBASED ADDRESSING,$ ;定义字符串sS2endss3segment;定义代码段s3assumecs:s3,ds:s2,ss:s1mainp

6、rocfarmovax,s1;栈初始化 movss,axleasp,top;栈初始化movax,s2;数据段初始化 movds,ax;数据段初始化movsi,15l:movdl,ssi ;dl获取字符串s得最后一个(从零开始得第十五个字符)movah,2;调用int 21h 2号功能输出dl上得值int21hdecsi;寄存器减一,准备获取下一个字符cmpsi,0jalmovah,4ch;终止int21hmainendps3endsendmain2、从键盘上输入两个数,分别放到x,y单元,求出它们得与s1segment stackdw100h dup(?)toplabelwords1endss

7、2segmenth1dbPlease input x:,$;提示输入h2dbPlease input y:,$;提示输入h3dbz=x+y:,$;提示输出crlfdb0dh,0ah,24h;定义回车换行xdw?ydw?1、逆序输出字符串“BASED ADDRESSING”s1segment stack;定义栈段s1dw 100 dup(?);定义栈空间为100endsmainprocfarmovax,s1;初始化movss,axleasp,topmovax,s2movds,ax;初始化leadx,h1;int 21h 9号功能输出“提示输入X”得字符串movah,9int21hxorbx,bx

8、;bx清零,即把bx置零InputX:movah,1;输入一个字符int21hcmpal,0dh;判断时候为“回车”字符jzexit1;如果就是回车字符就跳转到exit1cmpal,30h;与30h(即字符0得asii值)比较jlexit1;如果输入字符小于0,跳转到exit1cmpal,39h;与39h(即字符9得ascii值)比较jgexit1;如果输入字符大于9,跳转到exit1subal,30h;al减去30h,输入字符转化成数字(从这一行开始到后面得add bx,ax为输入字符转化为数字得处理方法)cbw;al扩充为axxchgax,bxmovcx,10mulcxxchgax,bxa

9、ddbx,ax;sub al,30h开始到这一行为输入字符转化为数字得处理方法jmpInputXexit1: movx,bx;把输入得存于bx得放到x中leadx,crlfmovah,9int21hleadx,h2movah,9int21hxorbx,bxInputY:;与InputX类似,输入ymovah,1int21hcmpal,0dhcs:s3,ds:s2,ss:s3assumes2s3segmentjzexit2al,30hexit2cmpal,39hjgexit2subal,30hcbwxchgax,bxmovcx,10mulcxxchgax,bxaddbx,axjmpInputYc

10、mpjlexit2: mov y,bxmov bx,x;把输入得存于bx得放到y中l4:addbx,yleadx,crlfmovah,9int21Hleadx,h3movah,9int21hxorsi,simovax,bxmovcl,10divclmovdl,ahmovdh,0pushdxincsi;此时bx为两数加与;si清零,用作计数;把与放到ax上;把与连续除以10知道与变为零,余数依次进栈l5:mov ah,0;重要,不能漏写al,0jnzl4popdxadddl,30hmovah,2int21hdecsicmpsi,0jnzl5movah,4chint21Hendpendscmpma

11、ins3;余数依次出栈;余数转换为显示得余数字符;输入余数字符end main3、就是编写一段程序,要求在长度为10得数组中,找出大于42h得无符号数得个数并存 入地址为up开始区域,找出小于42h得无符号数得个数并存入地址为down得开始区域, 并分别显示up、down数组得个数与数组得数字s1tops1s2h1h2crlfdbdbsegment stackdw 100h dup(?)label wordends segmentthe num of up array and the up array are(prints in decimalism) :,$the num of down a

12、rray and the down array are(prints in decimalism) :,$db db0dh,0ah,24h0,50h,11h,61h,22h,72h,33h,73h,41h,74h,$updb10 dup(?)downdb10 dup(?)s2endss3segmentassumecs:s3,ds:s2,ss:s3mainprocfarmovax,s1movss,axleasp,topmovax,s2movds,axmovsi,0movdi,1movbp,1repeat: cmparraysi,42h42h得值放到up数组里面jbdownarraymovdl,a

13、rraysimovupbp,dlincsicmpsi,10jzexit1incbpjmprepeatdownarray:mov dl,arraysimovdowndi,dlincsicmpsi,10jzexit2incdiarray;定义数组array;定义up数组;定义down数组;把array数组中小于42h得值放到down数组里,大于jmpexit1: subrepeatdi,1jmp exit exit2:sub exit: mov便于后面得输出结束bp,1dx,bp;把分配好得up数组与down数组在其有效数字后面添加$,movup0,dlinc bpmovupbp,$movdx,d

14、imovdown0,dlinc dimovdowndi,$movcl,10movsi,0lea dx,h1mov ah,9int 21hPrintUparray:cmpupsi,$jznextmov al,upsicallprintincsijmpPrintUparraynext:lea dx,crlfmov ah,9int 21hlea dx,h2int 21hxor si,siPrintDownArray:cmpdownsi,$jzatendmov al,downsicallprintincsijmpPrintDownArrayprint procnear ;printmovdi,0red

15、iv: movah,0divclmovdl,ah为输出十进制输出某个数得子程序movdh,0pushdxincdicmpal,0jnzredivbreak:popdxadddl,30hmovah,2int21hdecdicmpdi,0jnzbreakmovdl, movah,2int21Hretprintendpatend:movah,4cint21Hmainendps3endsendmaintempdb?s2endss3segmentassumecs:s3,ds:s2,ss:s3mainprocfarmovax,s1movss,axleasp,topmovax,s2movds,axleadx

16、,h1movah,9int21h4、 键盘输入一段字符串, 其中小写字母以大写字母输出, 其她字符不变输出s1tops1s2h1segment stack dw 100h dup(?)label wordh2crlfendssegment dbdb dbPlease input astring:,$ The changedstring is:,$ 0dh,0ah,24hmov si,0 l: mov ah,1int 21hcmp al,0dhjzexitjlputincmp al,zjgputinsub al,20h;把小写字符变为大写字符putin:mov tempsi,al;把字符放到te

17、mp数组里incsijmplexit:lea dx,crlf;输出tmp数组movah,9int21hleadx,h2movah,9int21hincsimovtempsi,$leadx,tempmovah,9int21hmovah,4chint21Hmainendps3endsendmain5、从键盘上就收一个小写字母,找出它得前导字符与后续字符s1segment stackdw100h dup(?)toplabelwords1endss2segmenth1dbPlease input a lowercase: ,$h2dbThe the three chars are: ,$crlfdb0

18、dh,0ah,24hs2endss3segmentassumecs:s3,ds:s2,ss:s3mainprocfarmovax,s1movss,axal,acmp,在顺序显示这三个字符leasp,topmovax,s2movds,axleadx,h1movah,9int21hmov ah,1int 21hcmp al,ajl lcmp al,zjg lmovcl,alleadx,crlfmovah,9int21Hlea dx,h2mov ah,9int 21hdecclmovdl,clmovah,2int21hmovdl, movah,2int21hincclmovdl,clmov ah,2

19、int 21hmovdl, movah,2int21hincclmovdl,clmovah,2int 21hmovah,4cint21Hendpendsendmainl:mains36、把一个包含 组中得数据得个数显示出来;输出前导字符;输出该字符;输出后导字符20个数据得数组M分成两组:正整数组P与负整数组N,分别把这两个数50h,-11h,61h,-22h,72h,-33h,73h,-41h,74h,21h,67h,-90h,73h,77h,-1h,-89h,-11h,61h,-22h,2s1segment stackdw100h dup(?)toplabelwords1endss2seg

20、menth1dbthe positive number is:,$h2dbthe negative number is:,$crlfdb0dh,0ah,24harraydwcmpdx,0jladdlowaddsi,2cmpsi,40jzexitjmpl;有符号数比较用jladdlow: incaddcmpjz jmp exit:leabxsi,2si,40 exitmovah,9int21hmovax,bcallprintleadx,crlfmovah,9int21hleadx,h1movah,9dx,h20h,$s2endss3segmentassumecs:s3,ds:s2,ss:s3ma

21、inprocfarmovax,s1movss,axleasp,topmovax,s2movds,axmovbx,0movsi,0l:dx,arraysimovint21hmov ax,20 sub ax,bxcallprintjmpatendprintprocnear;打印数字字符得子程序movcl,10movsi,0repeat: div clmovdl,ahadd dl,30h mov dh,0pushdxincsimov ah,0cmpal,0jnzrepeatl2:popdxmovah,2int21hdecsicmpsi,0jnzl2printret endpatend: movah,

22、4chint21Hmainendps3endsendmain7、打印输出首地址为data得20个字数组中得最小偶数s1segment stackdw100h dup(?)toplabelwords1endss2segmenth1dbthe min even number is: ,$crlfdb0dh,0ah,24hdatadw50,-11,61,-22,72,-33,73,-41,74,21,67,-90,73,77,-1,-s2endss3segmentassumecs:s3,ds:s2,ss:s1mainprocfarmovax,s189,-11,61,-22,20,$l1:exit:l

23、5:printmovss,axleasp,topmovax,s2movds,axmovbx,65534movsi,0mov cl,100mov dl,2movax,datasicmpax,0jnll4negaxdivclmoval,ahl2:;如果就是负数,则求补l4:mov ah,0div dlcmp ah,0 jnz l1cmp bx,datasijl l1 movbx,datasi addsi,2cmp si,40 jzexit jmp l2 leamovintcmpjnlnegmovmovintmovcalljmpprocmovmovrepeat: divmovadd dl,30hmo

24、v;bx存最小数,初始令最小值置为65534;比较最小值与数组中得每个数;如果数组中得数大于最小值跳转到l1;如果数组中得数小于最小值则将其赋给最小值dx,h1ah,9 21hbx,0l5 bxdl,-ah,221hax,bxprint;调用子程序输出最小值atendnearcl,10si,0cldl,ahdh,0crlfdb0dh,0ah,24hstr1db50,?,50 dup($)str2db50,?,50 dup($)s2endss3segmentassumecs:s3,ds:s2,ss:s3mainprocfarmovax,s1movss,axleasp,topmovax,s2pus

25、hdxincsimov ah,0cmpal,0jnzrepeatl3:popdxmovah,2int21hdecsicmpsi,0jnzl3retprintendpatend:movah,4chint21Hmainendps3endsendmain8、输入两船字符串string1与string2,并比较两个字符串就是否相等, 相等就显示“match”, 否则显示s1no match”segment stack dw100h dup(?)tops1label wordendss2h1h2h3h4dbdbsegmentdb Please input the first string: ,$ dbP

26、lease input the second string: ,$MATCH,$NO MATCH,$movds,axlea dx,h1mov ah,9 int 21hlea dx,str1 mov ah,0ahint 21hlea dx,crlf mov ah,9 intmov ah,0ah int 21h lea dx,crlfleadx,h2intlea21hdx,str2movdl,str1+1;str1+1为str1实际得字符个数cmpdl,str2+1;str2+1为str2实际得字符个数jnzlmovsi,2l2:movdl,str1sicmpdl,str2sijnzlincsic

27、mpsi,50jzl3jmpl2l:leadx,h4;输出不匹配信息movah,9int21hl3:leadx,h3;输出匹配信息movah,9int21hmovah,4chint21Hmain endps3endsendmain9、从键盘接收一个四位得十六进制数,并在终端显示与它等值得二进制数s1segment stackdw100hdup(?)toplabelwords1endss2segmenth1dbPlease input a hexadecimal number: ,$h2dbThe number is printed in binary number: ,$21h21hmov a

28、h,9intxchg movmul xchgax,bxdx,10hdx ax,bxbx,axnewcharadd ;loopdeccxcmp cx,0jnznewchartempdb17 dup($)crlfdb0dh,0ah,24hs2endss3segmentassumecs:s3,ds:s2,ss:s3mainprocfarmovax,s1movss,axleasp,topmovax,s2movds,axrepeat: leadx,h1l1:l2:mov ah,9int 21hmovbx,0movcx,4har:movah,1int21hcmpal,30hjbrepeatcmpal,46

29、hjgrepeatcmpal,39hjnbl1subal,30hjmpl2;接收新字符;如果输入字符大于9跳到l1cmp jbsubjmpcbwal,41hrepeatal,37hl2;如果输入字符小于A,则输入错误,跳到rep eat;输入字符为AZ,故相应地要减37h;l2为把输入字符转化为数值leadx,crlfmovah,9int21hl5:l3:l4:mains3leaintmovmovroljcmovjmpmovincloopleamovintmovintendpendsenddx,h221hsi,0cx,10hbx,1l3tempsi,0l4tempsi,1sil5dx,temp

30、ah,921hah,4ch21H;cx作计数器,即待会要循环16次;bx循环左移以为,最高位进标志位;若标志位为1则跳转到l3main10从键盘输入一系列以$为结束符得字符串, 然后对其中得非数字字符计数, 并显示计数结 果s1tops1s2h1h2crlfsegment stackdw 100h dup(?) label wordends segment db db dbPlease input a string: ,$The number of the chars that is notdigit:,$ 0dh,0ah,24hs2endss3segmentassumecs:s3,ds:s2

31、,ss:s3mainprocfarmovax,s1movss,axleasp,topmovax,s2movds,axlea movah,9 int 21hdx,h1movcx,0l2:movah,1int21hl:l4:l5:cmpal,$jzexitcmpal,30hjblcmpal,39hjnbljmpl2inccxjmpl2leadx,crlfmovah,9int21hleadx,h2int21hmovsi,0movbl,10movax,cxdivblmovdl,ahmovdh,0pushdxincsimovah,0cmpal,0jnzl4popdxexit:adddl,30h mov

32、ah,2 int 21h dec si cmp si,0 jnz l5 mov ah,4ch int 21H mainendp s3 endsend main11、有一个首地址为mem得10个字得数组,试编程序删除数组中所有为零得项,并将后 续项向前压缩,最后将数组得剩余部分补上零s1tops1s2segment stackdw 100h dup(?) label wordendssegmentmemdw0,1,0,3,0,0,4,5,crlfdb0dh,0ah,24hs2endss3segmentassumecs:s3,ds:s2,ss:s3mainprocfarmovax,s1movss,

33、axleasp,topmovax,s2movds,axmov si,0mov di,2repeat: cmp di,20 jz exitmov bx,memsi movdx,memdi cmp bx,0 jnznext xchg bx,dx movmemsi,bx mov memdi,dxnext:cmp memsi,0jz l add l:adddi,2jmp repeatsi,2exit:movah,4chint21Hmainendps3endsendmain;以下就是该算法描述;定义两个指针,当前指针;di指向第二个字得到得值;若此时si指向字为0,则si与检查指针di,先把si指针指向

34、第一个字得到得值bx,dx。若bx为0,di自加2,否则,则交换这两字,di,否则,di,si都自己加2。如此循环直到di指向最后一个字。;这样就把所有非零字至于前面了。12、从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在 制一个程序测试字符串中就是否存在数字。如有,则把cl得第五位置1,string中,就是编 否则将该位置置0s1segment stackdw100toplabel words1endss2segmentdup(?)h1h2dbdbcrlfdbPlease input a string:,$cx: ,$0dh,0ah,24h50,?,50 dup($)s2end

35、ss3segmentassumecs:s3,ds:s2,ss:s3mainprocfarmovax,s1movss,axleasp,topmovax,s2movds,axstringdbandl2:cl,0dfh ;先假设无数字,置0 dx,h1mov ah,9 int 21hlea dx,string mov ah,10d int 21h mov si,2cmp stringsi,$ jz exit mov dl,stringsicmp dl,30h jb l cmp dl,39h jnb l or cl,20h jmpexitlea;有数字,置1l: inc si jmp l2exit:l

36、eadx,crlfmovah,9int21hlea dx,h2int21hmovax,cxcallprintjmpatendprintprocnearmovcl,10movsi,0repeat: divclmovdl,ahadd dl,30hmovdh,0pushdxincsimov ah,0cmpal,0jnzrepeatl3:popdxmovah,2int21hdecsicmpsi,0jnzl3retprintendpatend: movah,4chint21Hmainendps3endsendmaindata得字数组中,存放了10个16位字数据,试编写一个程序,求出平均bx寄存器中(f分

37、13、在首地址为值放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在 别考虑有符号数、无符号数情况)s1segment stack dw 100h dup(?)tops1s2datacrlflabel wordendssegmentdw -1,0,1,-2,2,3,-3,-4,4,15,$db 0dh,0ah,24hs2endss3segmentassumecs:s3,ds:s2,ss:s3mainprocfarmovax,s1movss,axleasp,topmovax,s2movds,axmov si,0 mov ax,0 l3:cmp datasi,$jz exitmov

38、dx,datasicmp dx,0 jnl l1neg dx sub ax,dxjmp l2l1: add ax,dxl2:addsi,2jmp l3exit:movcl,10 ;平均值放到ax中divclmov ah,0mov si,0movbx,0l5:cmpdatasi,$;小于平均值得数得个数放到bx中jzexit2cmpax,datasijzl6jll6incbxl6:addsi,2jmpl5exit2: movah,4chint21Hmainendps3endsendmain14、 一直数组A包含15个互不相等得整数,数组B包含20个互不相等得整数。_ . r .-If f/ /

39、_ . r . , f , |M t/口f.f.个程序,把既在A中又在B中出现得整数存放于数组C中并显示C中得数值;两层循环比较得出两个数组中相同得数值s1segment stackdw100h dup(?)toplabelwords1endss2segmentadw1h,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,$cdw 16 dup($)crlfdb0dh,0ah,24hs2en

40、dss3segmentassume cs:s3,ds:s2,ss:s3mainprocfar试编制一dwmovax,s1movss,axleasp,topmovax,s2movds,axmov si,0mov di,0mov bp,0cmp di,40l4:movcl,10movsi,0t: divclmovdl,ahadd dl,30hmovdh,0pushdxincsimov ah,0cmpal,0nearl2:l3:l:exit:l6:jz l2 jmpl3 add si,2cmp si,30jz movmovmovcmpjnzexitdi,0ax,asibx,bdi ax,bxlmov

41、 add bp,2 adddi,2 jmp l4mov bp,0 cmpcbp,$ jzatend movax,cbp callprint add bp,2mov dl, movah,2 int 21hcbp,axjmp l6print procmovah,2int21hdecsicmpsi,0jnzl5ret printendpatend:movah,4chint21Hmainendps3endsendmain15、设在A、B与D单兀中分别存放着三个数。若三个数都不就是存放在S单元,若其中有一个数为0,则把其它两个单元也清零。s1segment stackdw100h dup(?)topla

42、belwords1endss2segmentadw1h,$bdw-11h,$d dw0h,$s dw2 dup($)crlf db0dh,0ah,24hs2endss3segmentassumecs:s3,ds:s2,ss:s3mainprocfarmovax,s1movss,axleasp,topmovax,s2movds,axmov ax,a0mov bx,b0mov dx,d0cmp ax,0jzlcmp bx,0jzlcmp dx,0l5:0,则求出三个数得与并请编写此程序jz ljnzpoprepeatdxmov cx,0cmp ax,0jnl add_axneg ax ;减法需先求

43、补sub cx,axjmp l2 add_ax: add cx,ax l2: cmp bx,0jnl add_bxneg bxsub cx,bxjmp l3 add_bx: add cx,bx l3: cmp dx,0jnl add_dxneg dxsub cx,dxjmp l4 add_dx: add cx,dx l4: mov s0,cxjmp exit l: mov a0,0mov b0,0mov d0,0exit:movah,4chint21Hmainendps3endsendmain16、从键盘输入一系列字符(以回车键结束) ,并按字母、数字与其她字符分类计数,最后 显示这三类得计数

44、结果s1tops1s2label wordletterendssegment dbdigitotherscrlf dbs2 s3the number of letter: ,$the number of digit: ,$ thenumber of other chars: ,$0dh,0ah,24h endsdbdbmainsegmentassume cs:s3,ds:s2,ss:s3proc farsegment stack dw 100h dup(?)movax,s1movss,axleasp,topmovax,s2movds,axmov bx,0mov cx,0mov dx,0t:mo

45、v ah,1int 21hcmp al,0dh jz exitcmp al,30h jbcount_others cmpal,z jnbcmpjbcmpjbcmpjbcount_othersal,39hcount_digital,Acount_othersal,Zcount_lettercmp al,a jbcount_others jmpcount_lettercount_letter:inc bx jmprepeatcount_digit:inc cx jmprepeatcount_others:inc dxjmp repeatexit: push cxpush dxcallleamovi

46、ntprint_crlfdx,letterah,9 21hmovcallcallleaax,bxprint_axprint_crlfdx,othersmov ah,9 int 21h pop dx ;栈,后进先出,先进后出mov ax,dxcall print_ax call print_crlf lea dx,digitmov ah,9 int 21hpop cx ;print_ax会修改cx得值,故要先把cx进栈movax,cxcall print_axjmp exit2 print_crlf proc nearlea dx,crlf mov ah,9 int 21hret print_c

47、rlf endpprint_axprocnearmovcl,10movsi,0repeat2:divclmovdl,ahadd dl,30hmovdh,0pushdxincsimov ah,0cmpal,0jnzrepeat2l3:popdxmovah,2int21hdecsicmpsi,0jnzl3retprint_axendpexit2:movah,4chint21Hmainendps3endsend main17、已定义两个整数变量A与B,试编写程序完成以下功能 (1)(2)(3)s1若两个树种有一个就是奇数,则将奇数存入A中,偶数存入B中若两个数均为奇数,则将两个数加1后存回原变量 若

48、两个数均为偶数,则两个变量均不变segment stackdw100hdup(?)toplabelwords1endss2segmenta dw12,$b dw-13,$s2endss3segmentassumecs:s3,ds:s2,ss:s3mainprocfarmovax,s1movss,axleasp,topmovax,s2movds,axmov si,0mov di,0mov dx,0cx,2ax,a0ax,0nextmovmovcmpjnlneg axnext: div cxcmp dx,1 jnzl mov si,1 l: movdx,0mov ax,b0cmp ax,0jnl

49、next2neg axnext2: div cxcmp dx,1jnz l2 mov di,1l2: cmp si,0jnz l3l3:l5:cmp di,0 jnz l4 jmp exit;都就是偶数,跳转到末尾cmp di,0 jnz l5jmp exit ;a0为奇数,b0为偶数,跳转到末尾movax,a0 cmp ax,0 jnl l6;a0,b0为奇数,a0加一存回原变量l6:l7:l8:neg axdec axneg axjmp l7inc axmov a0,axmov ax,b0cmp ax,0 jnll8 neg ax decax;a0,b0为奇数,b0加一存回原变量neg a

50、xjmp l9inc axmov b0,axjmp exit movax,a0 movbx,b0 mova0,bxmov b0,axexit: movl9:l4:;a0为偶数,b0为奇数,互换mains3intendpendsah,4ch21Hend18、写一段子程序 并将行数放在ax寄存器中s1mainskiplines,完成输出空行得功能。 空行得行数由用户在主程序过键盘输入,tops1s2crlf s2segment stackdw100h dup(?)label wordendssegmentdb0dh,0ah,24h,$endss3segmentint 21hcmp al,0dh j

51、z next cbwassumecs:s3,ds:s2,ss:s3procfarmovax,s1movss,axleasp,topmovax,s2movds,axmov bx,0mainah,1movsubax,30hnext:xchg ax,bx mov cx,10 mulcx xchg ax,bx add bx,axjmp mov ax,bx skiplinesmov ah,4ch 21Hcallintendp skiplinesproc nearmainmovrepeat: cmp jzexit lea movah,9 int 21hdecjmp repeatexit: retskipl

52、ines endps3 endsbx,axbx,0dx,crlfbxmain19、设有10个学生成绩分别就是76, 69,84,73,88,99,63,100与80。试编写一个 子程序统计60-69分,70-79分,80-89分,90-99分与100分得人数,并分别放到S6,endS7,S8,S9,S10单元中s1segment stackdw100htoplabelworddup(?)l:s1endss2segmentscoredws6dw0,$s7dw0,$s8dw0,$s9dw0,$s10 dw0,$s2endss3segmentassumemainprocmovcs:s3,ds:s2,

53、ss:s3far76,69,84,90,73,88,99,63,100,80,$ax,s1movleamovmov mov si,0 repeat:cmp si,20 jz movss,axsp,topax,s2ds,axl:l2:l3:cmpjnzmovincexitax,scoresi ax,100lbx,s100bxs100,bxjmp l5;必须跳转到si加二那里cmp jbmovax,90l2mov inc movs90,bx jmpl5 cmp ax,80jb l3mov bx,s80inc bxbx,s90bxmov s80,bxjmp l5ax,70l4cmpjbmovincb

54、x,s70bxmovs70,bxjmp l5 mov bx,s60 inc bx main20、 编写子程序嵌套结构得程序, 把整数分别用二进制与八进制显示出来l5:add si,2 jmprepeatexit:mov ah,4chint 21hmainendps3endsends1segment stackdw100h dup(?)toplabelwords1endss2segmentdatadw16h,32h,$ ;crlf db0dh,0ah,24h,$s2endss3segmentassumecs:s3,ds:s2,ss:s3bandoprocfarmovax,s1movss,axle

55、asp,topmovax,s2movds,axmovsi,0repeat:cmp si,4jzexit要显示得两个数字mov bx,datasi callpairscall print_crlfadd si,2 jmp repeatexit:mov ah,4chint 21hbandoendppairsproc nearmov cx,10hl: rolbx,1jcprint_onemov dl,0;以二进制数输出l4:mov s60,bxjmp print_zero print_one:mov dl,1print_zero:mov ah,2int 21hloop l mov dl, mov a

56、h,2int 21hmov cl,3 mov dl,bl and dl,7d add dl,30hpush dx rotate: ror bx,clmov dl,bland dl,7d add dl,30h push dx dec ch cmp ch,0jnz rotate ror bx,1mov dl,bl and dl,1 add dl,30hprint:jz pop dx mov ah,2 int 21hinc chjmp printatend: ret以八进制数输出pairs endp print_crlf proc near lea dx,crlf mov ah,9 int 21h以

57、二进制数输出mov dh,0mov ch,4;以八进制数输出mov ah,2int21hcmp ch,5atendretprint_crlf endps3 endsend bando21、在D盘根目录建立一个文件abc、txt,第一次向文件写入“123456”六个字符,第二次增加abcdefg”几个字符s1segment stackdw100hdup(?)toplabel words1endss2segmentfn dbd:abc、txt,0fh dw?buff1db1,2,3,4,5,6,$buff2dba,b,c,d,e,f,$s2endss3segmentassumecs:s3,ds:s2,ss:s3farmainprocmovax,s1movmovleamovleamovmovah,3chcx,20hss,axsp,topax,s2ds,ax ;建立文件dx,fn2

温馨提示

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

评论

0/150

提交评论