24个汇编实例小程序
24个汇编小程序
题目列表:
逆序输入字符串“basedaddressing”
从键盘上输入两个数,分别放到x,y单元,求出它们的和
先行撰写一段程序,建议在长度为10h的数组中,找到大于42h的并无符号数的个数并取走地址为up已经开始区域,找到大于42h的并无符号数的个数并取走地址为down的已经开始区域
键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出
从键盘上就交一个小写字母,找到它的前导字符和时程字符,在顺序表明这三个字符
把一个包含20个数据的数组m分成两组:正整数组p和负整数组n,分别把这两个数组中的数据的个数显示出来
算出首地址为data的100个字数组中的最轻偶数,并把它放到ax中
输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“nomatch”
从键盘发送一个四位的十六进制数,并在终端表明与它等值的二进制数
从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果
存有一个首地址为mem的100个字的数组,先行编程序删掉数组中所有为零的项,并将时程项向前放大,最后将数组的余下部分补齐零
从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在string中,是编制一个程序测试字符串中是否存在数字。
如有,则把cl的第五位置1,否则将该位置置0
在首地址为data的字数组中,放置了100h的16位字数据,先行撰写一个程序,谋出来平均值放到ax寄存器中,并算出数组中存有多少个数大于此平均值,将结果放到bx 寄存器中(f分别考量存有符号数、并无符号数情况)
一直数组a包含15个互不相等的整数,数组b包含20个互不相等的整数。
试编制一个程序,把既在a中又在b中出现的整数存放于数组c中
设于a、b和d单元中分别放置着三个数。
若三个数都不是0,则算出三个数的和并存放在s单元,若其中存有一个数为0,则把其它两个单元也清零。
恳请撰写此程序
从键盘输入一系列字符(以回车键结束),并按字母、数字和其他字符分类计数,最后显示这三类的计数结果
已定义两个整数变量a和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单元中
撰写子程序嵌套结构的程序,把整数分别用二进制和八进制表明出
在d盘根目录建立一个文件abc.txt,第一次向文件写入“123456”六个字符,第二次增加“abcdefg”几个字符
从键盘上输出文本文件:“d:\\temp.txt”的内容后,然后新建一个文件
“d:\\temp2.txt”,把前一个文件的所有内容导入到后一个文件中
从键盘上输入一个十进制数,以十六进制数显示出来。
要求子程序用寄存器参数传送方法
先行基本建设一个程序,把bx寄存器中的二进制数用十六进制数的形式在屏幕上表明出
代码:
1.逆序输入字符串“basedaddressing”
s1segmentstack;定义栈段s1
dw100dup(?);定义栈空间为100toplabelword;top指向栈顶s1ends
s2segment;定义数据段s2sdb'basedaddressing','$';定义字符串ss2ends
s3segment;定义代码段s3assumecs:s3,ds:s2,ss:s1
mainprocfar
movax,s1;栈初始化――movss,axleasp,top;――栈初始化
movax,s2;数据段初始化――movds,ax;――数据段初始化
movsi,15
l:movdl,s[si];dl获取字符串s的最后一个(从零开始的第十五个字符)movah,2;调用int21h2号功能输出dl上的值int21h
decsi;寄存器减至一,准备工作以获取下一个字符cmpsi,0jal
movah,4ch;终止int21hmainendps3ends
endmain
2.从键盘上输入两个数,分别放到x,y单元,求出它们的和
s1segmentstack
dw100hdup(?)toplabelwords1ends
s2segment
h1db'pleaseinputx:','$';提示输入h2db'pleaseinputy:','$';提示输入
h3db'z=x+y:','$';提示输出
crlfdb0dh,0ah,24h;定义contrary下划线xdw?ydw?s2ends
s3segment
assumecs:s3,ds:s2,ss:s3mainprocfar
movax,s1;初始化――movss,axleasp,topmovax,s2
movds,ax;――初始化
leadx,h1;int21h9号功能输出“提示输入x”的字符串movah,9int21h
xorbx,bx;bx清零,即为把bx复置零
inputx:movah,1;输入一个字符int21h
cmpal,0dh;推论时候为“contrary”字符jzexit1;如果就是contrary字符就重定向
至exit1cmpal,30h;和30h(即为字符0的asii值)比较jlexit1;如果输出字符大于'0',重定向至exit1cmpal,39h;和39h(即为字符9的ascii值)比较jgexit1;如果输出字符大
于'9',重定向至exit1
subal,30h;al减去30h,输入字符转化成数字(从这一行开始到后面的addbx,ax为输入字符转化为数字的处理方法)cbw;al扩充为axxchgax,bxmovcx,10mulcxxchgax,bx
addbx,ax;subal,30h已经开始至这一犯罪行为输出字符转变为数字的处置方法
jmpinputx
exit1:movx,bx;把输出的藏于bx的放在x中
leadx,crlfmovah,9int21hleadx,h2movah,9int21hxorbx,bx
inputy:;和inputx类似,输入ymovah,1int21hcmpal,0dhjzexit2cmpal,30hjlexit2
cmpal,39hjgexit2subal,30hcbw
xchgax,bxmovcx,10mulcxxchgax,bxaddbx,axjmpinputy
exit2:movy,bx;把输出的藏于bx的放在y中movbx,x
addbx,y;此时bx为两数加和
leadx,crlfmovah,9int21hleadx,h3movah,9int21h
xorsi,si;si清零,用作计数
movax,bx;把和放在ax上
l4:movcl,10;把和连续除以10知道和变为零,余数依次进栈
divclmovdl,ahmovdh,0pushdxincsimovah,0;重要,不能漏写cmpal,0jnzl4
l5:popdx;余数依次出栈
adddl,30h;余数转换为显示的余数字符movah,2;输入余数字符
int21hdecsicmpsi,0jnzl5
movah,4ch。