24个汇编实例小程序Word文件下载.docx

上传人:b****3 文档编号:7717680 上传时间:2023-05-09 格式:DOCX 页数:64 大小:29.04KB
下载 相关 举报
24个汇编实例小程序Word文件下载.docx_第1页
第1页 / 共64页
24个汇编实例小程序Word文件下载.docx_第2页
第2页 / 共64页
24个汇编实例小程序Word文件下载.docx_第3页
第3页 / 共64页
24个汇编实例小程序Word文件下载.docx_第4页
第4页 / 共64页
24个汇编实例小程序Word文件下载.docx_第5页
第5页 / 共64页
24个汇编实例小程序Word文件下载.docx_第6页
第6页 / 共64页
24个汇编实例小程序Word文件下载.docx_第7页
第7页 / 共64页
24个汇编实例小程序Word文件下载.docx_第8页
第8页 / 共64页
24个汇编实例小程序Word文件下载.docx_第9页
第9页 / 共64页
24个汇编实例小程序Word文件下载.docx_第10页
第10页 / 共64页
24个汇编实例小程序Word文件下载.docx_第11页
第11页 / 共64页
24个汇编实例小程序Word文件下载.docx_第12页
第12页 / 共64页
24个汇编实例小程序Word文件下载.docx_第13页
第13页 / 共64页
24个汇编实例小程序Word文件下载.docx_第14页
第14页 / 共64页
24个汇编实例小程序Word文件下载.docx_第15页
第15页 / 共64页
24个汇编实例小程序Word文件下载.docx_第16页
第16页 / 共64页
24个汇编实例小程序Word文件下载.docx_第17页
第17页 / 共64页
24个汇编实例小程序Word文件下载.docx_第18页
第18页 / 共64页
24个汇编实例小程序Word文件下载.docx_第19页
第19页 / 共64页
24个汇编实例小程序Word文件下载.docx_第20页
第20页 / 共64页
亲,该文档总共64页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

24个汇编实例小程序Word文件下载.docx

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

24个汇编实例小程序Word文件下载.docx

从键盘上输入一个十进制数,以十六进制数显示出来。

要求子程序用寄存器参数传送方法

试编制一个程序,把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;

终止

mainendp

s3ends

endmain

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

s1segmentstack

dw100hdup(?

toplabelword

s2segment

h1db'

Pleaseinputx:

'

提示输入

h2db'

Pleaseinputy:

h3db'

z=x+y:

提示输出

crlfdb0dh,0ah,24h;

定义回车换行

xdw?

ydw?

s2ends

s3segment

s3

初始化——

leasp,top

movax,s2

movds,ax;

——初始化

leadx,h1;

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

movah,9

xorbx,bx;

bx清零,即把bx置零

InputX:

movah,1;

输入一个字符

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

leadx,h2

xorbx,bx

InputY:

和InputX类似,输入y

movah,1

cmpal,0dh

jzexit2

cmpal,30h

jlexit2

cmpal,39h

jgexit2

subal,30h

cbw

addbx,ax

jmpInputY

exit2:

movy,bx;

把输入的存于bx的放到y中

movbx,x

addbx,y;

此时bx为两数加和

int21H

leadx,h3

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;

输入余数字符

decsi

jnzl5

movah,4ch

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

thenumofuparrayandtheuparrayare(printsindecimalism):

thenumofdownarrayandthedownarrayare(printsindecimalism):

crlfdb0dh,0ah,24h

arraydb0,50h,11h,61h,22h,72h,33h,73h,41h,74h,'

定义数组array

updb10dup(?

定义up数组

downdb10dup(?

);

定义down数组

movax,s1

movds,ax

movsi,0

movdi,1

movbp,1

repeat:

cmparray[si],42h;

把array数组中小于42h的值放到down数组里,大于42h的值放到up数组里面

jbdownarray

movdl,array[si]

movup[bp],dl

cmpsi,10

jzexit1

incbp

jmprepeat

downarray:

movdown[di],dl

incsi

incdi

subdi,1

jmpexit

subbp,1

exit:

movdx,bp;

把分配好的up数组和down数组在其有效数字后面添加'

,便于后面的输出结束

movup[0],dl

movup[bp],'

movdx,di

movdown[0],dl

movdown[di],'

movcl,10

leadx,h1

PrintUparray:

cmpup[si],'

jznext

moval,up[si]

callprint

jmpPrintUparray

next:

xorsi,si

PrintDownArray:

cmpdown[si],'

jzatend

moval,down[si]

jmpPrintDownArray

printprocnear;

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

movdi,0

rediv:

movah,0

jnzrediv

break:

popdx

adddl,30h

movah,2

decdi

cmpdi,0

jnzbreak

movdl,'

'

ret

printendp

 

atend:

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

Pleaseinputastring:

Thechangedstringis:

tempdb?

jzexit

cmpal,'

a'

jlputin

z'

jgputin

subal,20h;

把小写字符变为大写字符

putin:

movtemp[si],al;

把字符放到temp数组里

jmpl

leadx,crlf;

输出tmp数组

movtemp[si],'

leadx,temp

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

Pleaseinputalowercase:

Thethethreecharsare:

jll

jgl

movcl,al

deccl

movdl,cl;

输出前导字符

inccl

输出该字符

输出后导字符

int21h

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

thepositivenumberis:

thenegativenumberis:

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

movbx,0

movdx,array[si]

cmpdx,0

jladdlow;

有符号数比较用jl

addsi,2

cmpsi,40

addlow:

incbx

movax,bx

movax,20

subax,bx

jmpatend

打印数字字符的子程序

movah,0

jnzrepeat

l2:

jnzl2

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

theminevennumberis:

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

movbx,65534;

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

movcl,100

movdl,2

movax,data[si]

cmpax,0

jnll4

negax;

如果是负数,则求补

moval,ah

divdl

cmpah,0

jnzl1

cmpbx,data[si];

比较最小值和数组中的每个数

jll1;

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

movbx,data[si];

如果数组中的数小于最小值则将其赋给最小值

l1:

jmpl2

cmpbx,0

jnll5

negbx

-'

callprint;

调用子程序输出最小值

printprocnear

l3:

jnzl3

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

Pleaseinputthefirststring:

Pleaseinputthesecondstring:

h3db'

MATCH'

h4db'

NOMATCH'

str1db50,?

50dup('

str2db50,?

leadx,str1

movah,0ah

leadx,str2

movdl,str1+1;

str1+1为str1实际的字符个数

cmpdl,str2+1;

str2+1为str2实际的字符

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2