24个汇编实例小程序.docx

上传人:b****7 文档编号:11389138 上传时间:2023-02-28 格式:DOCX 页数:64 大小:29.04KB
下载 相关 举报
24个汇编实例小程序.docx_第1页
第1页 / 共64页
24个汇编实例小程序.docx_第2页
第2页 / 共64页
24个汇编实例小程序.docx_第3页
第3页 / 共64页
24个汇编实例小程序.docx_第4页
第4页 / 共64页
24个汇编实例小程序.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

24个汇编实例小程序.docx

《24个汇编实例小程序.docx》由会员分享,可在线阅读,更多相关《24个汇编实例小程序.docx(64页珍藏版)》请在冰豆网上搜索。

24个汇编实例小程序.docx

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(?

);定义栈空间为100

toplabelword;top指向栈顶

s1ends

s2segment;定义数据段s2

sdb'BASEDADDRESSING','$';定义字符串s

S2ends

s3segment;定义代码段s3

assumecs:

s3,ds:

s2,ss:

s1

mainprocfar

movax,s1;栈初始化——

movss,ax

leasp,top;——栈初始化

movax,s2;数据段初始化——

movds,ax;——数据段初始化

movsi,15

l:

movdl,s[si];dl获取字符串s的最后一个(从零开始的第十五个字符)

movah,2;调用int21h2号功能输出dl上的值

int21h

decsi;寄存器减一,准备获取下一个字符

cmpsi,0

jal

movah,4ch;终止

int21h

mainendp

s3ends

endmain

2.从键盘上输入两个数,分别放到x,y单元,求出它们的和

s1segmentstack

dw100hdup(?

toplabelword

s1ends

s2segment

h1db'Pleaseinputx:

','$';提示输入

h2db'Pleaseinputy:

','$';提示输入

h3db'z=x+y:

','$';提示输出

crlfdb0dh,0ah,24h;定义回车换行

xdw?

ydw?

s2ends

s3segment

assumecs:

s3,ds:

s2,ss:

s3

mainprocfar

movax,s1;初始化——

movss,ax

leasp,top

movax,s2

movds,ax;——初始化

leadx,h1;int21h9号功能输出“提示输入x”的字符串

movah,9

int21h

xorbx,bx;bx清零,即把bx置零

InputX:

movah,1;输入一个字符

int21h

cmpal,0dh;判断时候为“回车”字符

jzexit1;如果是回车字符就跳转到exit1

cmpal,30h;和30h(即字符0的asii值)比较

jlexit1;如果输入字符小于'0',跳转到exit1

cmpal,39h;和39h(即字符9的ascii值)比较

jgexit1;如果输入字符大于'9',跳转到exit1

subal,30h;al减去30h,输入字符转化成数字(从这一行开始到后面的addbx,ax为输入字符转化为数字的处理方法)

cbw;al扩充为ax

xchgax,bx

movcx,10

mulcx

xchgax,bx

addbx,ax;subal,30h开始到这一行为输入字符转化为数字的处理方法

jmpInputX

exit1:

movx,bx;把输入的存于bx的放到x中

leadx,crlf

movah,9

int21h

leadx,h2

movah,9

int21h

xorbx,bx

InputY:

;和InputX类似,输入y

movah,1

int21h

cmpal,0dh

jzexit2

cmpal,30h

jlexit2

cmpal,39h

jgexit2

subal,30h

cbw

xchgax,bx

movcx,10

mulcx

xchgax,bx

addbx,ax

jmpInputY

exit2:

movy,bx;把输入的存于bx的放到y中

movbx,x

addbx,y;此时bx为两数加和

leadx,crlf

movah,9

int21H

leadx,h3

movah,9

int21h

xorsi,si;si清零,用作计数

movax,bx;把和放到ax上

l4:

movcl,10;把和连续除以10知道和变为零,余数依次进栈

divcl

movdl,ah

movdh,0

pushdx

incsi

movah,0;重要,不能漏写

cmpal,0

jnzl4

l5:

popdx;余数依次出栈

adddl,30h;余数转换为显示的余数字符

movah,2;输入余数字符

int21h

decsi

cmpsi,0

jnzl5

movah,4ch

int21H

mainendp

s3ends

endmain

3.是编写一段程序,要求在长度为10的数组中,找出大于42h的无符号数的个数并存入地址为up开始区域,找出小于42h的无符号数的个数并存入地址为down的开始区域,并分别显示up、down数组的个数和数组内的数字

s1segmentstack

dw100hdup(?

toplabelword

s1ends

s2segment

h1db'thenumofuparrayandtheuparrayare(printsindecimalism):

','$'

h2db'thenumofdownarrayandthedownarrayare(printsindecimalism):

','$'

crlfdb0dh,0ah,24h

arraydb0,50h,11h,61h,22h,72h,33h,73h,41h,74h,'$';定义数组array

updb10dup(?

);定义up数组

downdb10dup(?

);定义down数组

s2ends

s3segment

assumecs:

s3,ds:

s2,ss:

s3

mainprocfar

movax,s1

movss,ax

leasp,top

movax,s2

movds,ax

movsi,0

movdi,1

movbp,1

repeat:

cmparray[si],42h;把array数组中小于42h的值放到down数组里,大于42h的值放到up数组里面

jbdownarray

movdl,array[si]

movup[bp],dl

incsi

cmpsi,10

jzexit1

incbp

jmprepeat

downarray:

movdl,array[si]

movdown[di],dl

incsi

cmpsi,10

jzexit2

incdi

jmprepeat

exit1:

subdi,1

jmpexit

exit2:

subbp,1

exit:

movdx,bp;把分配好的up数组和down数组在其有效数字后面添加'$',便于后面的输出结束

movup[0],dl

incbp

movup[bp],'$'

movdx,di

movdown[0],dl

incdi

movdown[di],'$'

movcl,10

movsi,0

leadx,h1

movah,9

int21h

PrintUparray:

cmpup[si],'$'

jznext

moval,up[si]

callprint

incsi

jmpPrintUparray

next:

leadx,crlf

movah,9

int21h

leadx,h2

int21h

xorsi,si

PrintDownArray:

cmpdown[si],'$'

jzatend

moval,down[si]

callprint

incsi

jmpPrintDownArray

printprocnear;print为输出十进制输出某个数的子程序

movdi,0

rediv:

movah,0

divcl

movdl,ah

movdh,0

pushdx

incdi

cmpal,0

jnzrediv

break:

popdx

adddl,30h

movah,2

int21h

decdi

cmpdi,0

jnzbreak

movdl,''

movah,2

int21H

ret

printendp

 

atend:

movah,4ch

int21H

mainendp

s3ends

endmain

4.键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出

s1segmentstack

dw100hdup(?

toplabelword

s1ends

s2segment

h1db'Pleaseinputastring:

','$'

h2db'Thechangedstringis:

','$'

crlfdb0dh,0ah,24h

tempdb?

s2ends

s3segment

assumecs:

s3,ds:

s2,ss:

s3

mainprocfar

movax,s1

movss,ax

leasp,top

movax,s2

movds,ax

leadx,h1

movah,9

int21h

movsi,0

l:

movah,1

int21h

cmpal,0dh

jzexit

cmpal,'a'

jlputin

cmpal,'z'

jgputin

subal,20h;把小写字符变为大写字符

putin:

movtemp[si],al;把字符放到temp数组里

incsi

jmpl

exit:

leadx,crlf;输出tmp数组

movah,9

int21h

leadx,h2

movah,9

int21h

incsi

movtemp[si],'$'

leadx,temp

movah,9

int21h

movah,4ch

int21H

mainendp

s3ends

endmain

5.从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符

s1segmentstack

dw100hdup(?

toplabelword

s1ends

s2segment

h1db'Pleaseinputalowercase:

','$'

h2db'Thethethreecharsare:

','$'

crlfdb0dh,0ah,24h

s2ends

s3segment

assumecs:

s3,ds:

s2,ss:

s3

mainprocfar

movax,s1

movss,ax

leasp,top

movax,s2

movds,ax

l:

leadx,h1

movah,9

int21h

movah,1

int21h

cmpal,'a'

jll

cmpal,'z'

jgl

movcl,al

leadx,crlf

movah,9

int21H

leadx,h2

movah,9

int21h

deccl

movdl,cl;输出前导字符

movah,2

int21h

movdl,''

movah,2

int21h

inccl

movdl,cl;输出该字符

movah,2

int21h

movdl,''

movah,2

int21h

inccl

movdl,cl;输出后导字符

movah,2

int21h

movah,4ch

int21H

mainendp

s3ends

endmain

6.把一个包含20个数据的数组M分成两组:

正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来

s1segmentstack

dw100hdup(?

toplabelword

s1ends

s2segment

h1db'thepositivenumberis:

','$'

h2db'thenegativenumberis:

','$'

crlfdb0dh,0ah,24h

arraydw50h,-11h,61h,-22h,72h,-33h,73h,-41h,74h,21h,67h,-90h,73h,77h,-1h,-89h,-11h,61h,-22h,20h,'$'

s2ends

s3segment

assumecs:

s3,ds:

s2,ss:

s3

mainprocfar

movax,s1

movss,ax

leasp,top

movax,s2

movds,ax

movbx,0

movsi,0

l:

movdx,array[si]

cmpdx,0

jladdlow;有符号数比较用jl

addsi,2

cmpsi,40

jzexit

jmpl

addlow:

incbx

addsi,2

cmpsi,40

jzexit

jmpl

exit:

leadx,h2

movah,9

int21h

movax,bx

callprint

leadx,crlf

movah,9

int21h

leadx,h1

movah,9

int21h

movax,20

subax,bx

callprint

jmpatend

printprocnear;打印数字字符的子程序

movcl,10

movsi,0

repeat:

divcl

movdl,ah

adddl,30h

movdh,0

pushdx

incsi

movah,0

cmpal,0

jnzrepeat

l2:

popdx

movah,2

int21h

decsi

cmpsi,0

jnzl2

ret

printendp

atend:

movah,4ch

int21H

mainendp

s3ends

endmain

7.打印输出首地址为data的20个字数组中的最小偶数

s1segmentstack

dw100hdup(?

toplabelword

s1ends

s2segment

h1db'theminevennumberis:

','$'

crlfdb0dh,0ah,24h

datadw50,-11,61,-22,72,-33,73,-41,74,21,67,-90,73,77,-1,-89,-11,61,-22,20,'$'

s2ends

s3segment

assumecs:

s3,ds:

s2,ss:

s1

mainprocfar

movax,s1

movss,ax

leasp,top

movax,s2

movds,ax

movbx,65534;bx存最小数,初始令最小值置为65534

movsi,0

movcl,100

movdl,2

l2:

movax,data[si]

cmpax,0

jnll4

negax;如果是负数,则求补

l4:

divcl

moval,ah

movah,0

divdl

cmpah,0

jnzl1

cmpbx,data[si];比较最小值和数组中的每个数

jll1;如果数组中的数大于最小值跳转到l1

movbx,data[si];如果数组中的数小于最小值则将其赋给最小值

l1:

addsi,2

cmpsi,40

jzexit

jmpl2

exit:

leadx,h1

movah,9

int21h

cmpbx,0

jnll5

negbx

movdl,'-'

movah,2

int21h

l5:

movax,bx

callprint;调用子程序输出最小值

jmpatend

printprocnear

movcl,10

movsi,0

repeat:

divcl

movdl,ah

adddl,30h

movdh,0

pushdx

incsi

movah,0

cmpal,0

jnzrepeat

l3:

popdx

movah,2

int21h

decsi

cmpsi,0

jnzl3

ret

printendp

atend:

movah,4ch

int21H

mainendp

s3ends

endmain

8.输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“nomatch”

s1segmentstack

dw100hdup(?

toplabelword

s1ends

s2segment

h1db'Pleaseinputthefirststring:

','$'

h2db'Pleaseinputthesecondstring:

','$'

h3db'MATCH','$'

h4db'NOMATCH','$'

crlfdb0dh,0ah,24h

str1db50,?

50dup('$')

str2db50,?

50dup('$')

s2ends

s3segment

assumecs:

s3,ds:

s2,ss:

s3

mainprocfar

movax,s1

movss,ax

leasp,top

movax,s2

movds,ax

leadx,h1

movah,9

int21h

leadx,str1

movah,0ah

int21h

leadx,crlf

movah,9

int21h

leadx,h2

int21h

leadx,str2

movah,0ah

int21h

leadx,crlf

movah,9

int21h

movdl,str1+1;str1+1为str1实际的字符个数

cmpdl,str2+1;str2+1为str2实际的字符

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1