汇编作业.docx
- 文档编号:16419838
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:19
- 大小:64.82KB
汇编作业.docx
《汇编作业.docx》由会员分享,可在线阅读,更多相关《汇编作业.docx(19页珍藏版)》请在冰点文库上搜索。
汇编作业
汇编程序作业
作者:
向顺
班级:
车辆四班
学号:
20111188
一、利用DOS系统功能调用,在显示器上显示数字1~100,每个数字之间有1个空格的间隔。
1在数据段定义数据DATA1为31H,DATA2为30H。
2.1代码段初始化。
将数据段的段地址送数据段寄存器DS,将SI指向DATA1,将DI指向DATA2,将功能号2H送AH。
2.2实现数字1
9的输出。
1
9的输出是用一个循环的方式实现的。
首先将9送CX作为循环的次数,然后定义NEXT1,在NEXT1下先将[SI]的内容31H通过系统2H功能的调用输出到屏幕上,然后输出一个空格,[SI]的内容自加1,然后执行LOOPNEXT1命令,此命令执行时,CX的内容9自减1结果不为零则返回到NEXT1处继续执行程序,直到CX的内容减为0,到此便完成了1
9在屏幕上的输出。
2.3实现数字10
99的输出。
10
99的输出是用一个双重循环程序实现的。
外循环实现十位上1
9输出的控制,内循环实现个位上0
9输出的控制。
首先将外循环的次数送BX,然后再内循中通过LOOP命令依次输出10
19的输出,然后跳出内循环来到外循环,外循环判断十位上的数没超过9后,实现十位上的数加1,并清冷各位上的数,接着实现20
29的输出,如此往复,直到10
99全部输出。
2.4实现数字100的输出。
通过调用系统的2H命令依次输出1,0,0。
3.运行结果如下:
2、计算两个字类型(c/c++的int类型)数据的和,两个加数从键盘输入,和显示在显示器上,如果和溢出了,程序要报警。
1.数据段的定义。
在数据段中,定义两个待输入的数据字节SHUJU1、SHUJU2,分别用于存放从键盘输入的两个数。
定义数据SUM用于存放连个数的和。
SHUJU1DB16,0,16DUP(?
)
SHUJU2DB16,0,16DUP(?
)
SUMDB00H
2.代码段的定义
2.1初始化数据段寄存器。
将SHUJU1的地址传到DX,将SUM的地址传到DI,调用系统键盘输入功能输入SHUJU1,CL中放数据的长度。
2.1在输入得SHUJU1字符串末尾加入’$’字符,并使BX中存放输入数字的初始地址。
2.2
MOVCH,CL
MOVBH,CH
上述两条语句分别定义了外循环和内循环的个数。
通过控制内循环,使输入的数据串SHUJU1中的单个字符减去30H(得到十进制数)并更具内循环次数的变化左移相应的位数将得到的结果存放于AX,再通过ADD[DI],AX这条语句将每次转换后的十进制数求,结果存放于[DI],同时通过外循环使输入的字符串从第一个字符到最好一个字符依次进行内循环的操作,最后[DI]中的值就是输入的数据串的十进制形式。
2.3
同2.2中的方法,将SHUJU2中每个字符依次转换成相对应的十进制数并依次与[DI]相加,最后SHUJU1(十进制)与SHUJU2(十进制)相加的十进制结果存放于[DI]中。
2.4
将[DI]中的数据除以0AH,余数依次存入堆栈直到余数为负。
从堆栈中取出余数加上30H将其转换成相应的ASCII码值,然后输出结果。
3.程序运行的结果如下:
不溢出:
溢出:
三、编写程序:
把一个单词翻译为摩尔斯电码,输出在显示器上。
1.数据段的定义
首先将BUFSIZE定义为最多可键入的字符个数50,将ACTLEN定义为?
以表示实际键入的字符数,为分配50个字节储存空间,初值均为20H以存放实际键入的字符。
变量BUFSIZE
最多可键入的字符个数50
变量ACTLEN
?
(以表示实际键入的字符数)
变量CHAARS
50个字节储存空间,初值均为20H(以存放实际键入的字符)
变量COMTAB
DW
COMA,COMB,COMC,COMD,COME,COMF,COMG,COMH,COMI,COMJ,COMK,COML,COMM1COMN,COMO,COMP,COMQ,COMR,COMS,COMT,COMU,COMV,COMW,COMX,COMY,COMZ(定义26个入口地址)
字符串STRG1DB'·━',0DH,0AH,'$'
STRG2DB'━···',0DH,0AH,'$'
.
.
.
STRG26DB'━━··',0DH,0AH,'$'
(26个摩尔斯电码的字符串)
2.代码段的定义
2.1
将数据段段地址送DS。
2.2
通过调用系统0AH功能实现字符串的输入,实际键入的字符书存放在ACTLEN中,并将ACTLEN中的值赋值给CL作为下面控制循环的次数。
将字符串首地址送SI。
在循环段NEXT之前,SI先自减1,CL先自加1(以保证循环次数的正确性)。
2.3
在NEXT段中,CL每次先自减1,然后通过JCXZEND1语句进行判断。
当达到要求的循环次数(输入的字符串中的每个字符都被转换为相应的ASCII码值)时,程序跳转到END1处,程序执行完毕,返回DOS操作界面;当不满足上述条件时,则继续往下执行,SI内容先自加1,然后将[SI]所指内容送AL,用SUBAL,’A’这条语句得出待转换得字符与A的ASCII值的差,将此差送BX,以作为COMTAB处的便宜地址从而得到相应得入口地址,程序转到上述入口地址处继续执行,输出相应的摩尔斯电码,然后通过JMPNEXT命令循环转换各个输入字符,直到转换完毕。
3.结果如下所示:
汇编作业程序
程序1:
DATASSEGMENT
DATA1DB31H
DATA2DB30H
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
LEASI,DATA1
LEADI,DATA2
MOVAH,2
MOVCX,9;定义循环次数
NEXT1:
MOVDL,[SI]
INT21H
MOVDL,20H
INT21H
INCBYTEPTR[SI]
LOOPNEXT1;输出1到9
MOVBX,10;定义外循环次数
NEXT2:
MOVCX,10;定义内循环次数
MOVAL,30H
MOV[SI],AL
INCBYTEPTR[DI]
NEXT3:
MOVDL,[DI]
INT21H
MOVDL,[SI]
INT21H
MOVDL,20H
INT21H
INCBYTEPTR[SI]
LOOPNEXT3;内循环
DECBX
MOVCX,BX
LOOPNEXT2;外循环
XORDX,DX;清零
MOVDL,31H;数字100的输出
INT21H
MOVDL,30H
INT21H
MOVDL,30H
INT21H
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
程序2:
DATASSEGMENT
SHUJU1DB16,0,16DUP(?
)
SHUJU2DB16,0,16DUP(?
)
SUMDB00H
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
LEADX,SHUJU1
LEADI,SUM
MOVAH,0AH
INT21H
MOVCL,SHUJU1+1
XORCH,CH
ADDDX,CX
MOVBX,DX
MOVBYTEPTR[BX+2],'$';在输入的字符串后插入'$'
ADDBX,2
SUBBL,CL;得到[BX]初值,即第三位的实际字符开始值
MOVCH,CL
NEXT1:
MOVAL,[BX]
MOVAH,0H
SUBAL,30H;得到十进制数字
MOVBH,CH
DECBH
NEXT2:
;根据数位得到数
JENEXT3
MOVDH,0AH
MULDH;AL的数值左移一位
DECBH
JANEXT2;循环将余下的字符转换为数值
NEXT3:
ADD[DI],AX;此步将每一次字符十进制转换并移位后的数字相加并送到[DI]
MOVBH,0
INCBX
DECCH
JANEXT1
MOVAH,2H
MOVDL,0AH
INT21H;换行
MOVDL,0DH
INT21H
LEADX,SHUJU2
MOVAH,0AH
INT21H
MOVCL,SHUJU2+1
XORCH,CH
ADDDX,CX
MOVBX,DX
MOVBYTEPTR[BX+2],'$';在第二个输入的字符串后加上‘$'
ADDBX,2
SUBBL,CL;得到SHUJU2的首地址
MOVCH,CL
NEXT4:
MOVAL,[BX]
MOVAH,0H
SUBAL,30H;得到十进制数字
MOVBH,CH
DECBH
NEXT5:
;根据数位得到数
JENEXT6
MOVDH,0AH
MULDH
DECBH
JANEXT5
NEXT6:
ADD[DI],AX;加法运算
MOVBH,0
INCBX
DECCH
JANEXT4
MOVAH,2H
MOVDL,0AH
INT21H
MOVDL,0DH
INT21H;第二个数值转换
MOVCX,0
MOVAX,[DI];将第二个数传到AX中
MOVBL,0AH
YUSHU:
;将每一次的余数存入堆栈(利用先进后出)
INCCX;CX控制取出次数AL判断是否已除完(商0)
DIVBL;无符号除法AX/BL=AL
PUSHAX
MOVAH,0
SUBAL,0
JAYUSHU
JIEGUO:
;取出余数+30h进行输出
POPAX
MOVDL,AH
ADDDL,30H
MOVAH,2
INT21H
DECCX
JAJIEGUO
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
程序3:
DATASSEGMENT;数据段
BUFSIZEDB50
ACTLENDB?
CHARSDB50DUP(?
)
COMTABDW
COMA,COMB,COMC,COMD,COME,COMF,COMG,COMH,COMI,COMJ,COMK,COML,COMM1
DWCOMN,COMO,COMP,COMQ,COMR,COMS,COMT,COMU,COMV,COMW,COMX,COMY,COMZ
STRG1DB'·━',0DH,0AH,'$'
STRG2DB'━···',0DH,0AH,'$'
STRG3DB'━·━·',0DH,0AH,'$'
STRG4DB'━··',0DH,0AH,'$'
STRG5DB'·',0DH,0AH,'$'
STRG6DB'··━·',0DH,0AH,'$'
STRG7DB'━━·',0DH,0AH,'$'
STRG8DB'····',0DH,0AH,'$'
STRG9DB'··',0DH,0AH,'$'
STRG10DB'·━━━',0DH,0AH,'$'
STRG11DB'━·━',0DH,0AH,'$'
STRG12DB'·━··',0DH,0AH,'$'
STRG13DB'━━',0DH,0AH,'$'
STRG14DB'━·',0DH,0AH,'$'
STRG15DB'━━━',0DH,0AH,'$'
STRG16DB'·━━·',0DH,0AH,'$'
STRG17DB'━━·━',0DH,0AH,'$'
STRG18DB'·━·',0DH,0AH,'$'
STRG19DB'···',0DH,0AH,'$'
STRG20DB'━',0DH,0AH,'$'
STRG21DB'··━',0DH,0AH,'$'
STRG22DB'···━',0DH,0AH,'$'
STRG23DB'·━━',0DH,0AH,'$'
STRG24DB'━··━',0DH,0AH,'$'
STRG25DB'━·━━',0DH,0AH,'$'
STRG26DB'━━··',0DH,0AH,'$'
DATASENDS
CODESSEGMENT;代码段
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS;初始化
MOVDS,AX
MOVDX,OFFSETBUFSIZE
MOVAH,0AH
INT21H
XORCX,CX
MOVCL,ACTLEN
XORSI,SI
LEASI,CHARS
DECSI
INCCL
NEXT:
INCSI
DECCL
JCXZEND1;CX内容为0时转移
MOVAL,BYTEPTR[SI];此步非常关键
SUBAL,'A'
XORAH,AH
ADDAX,AX
MOVBX,AX
JMPCOMTAB[BX]
END1:
MOVAX,4C00H;必须将End1提到此处,否则超过JCXZ范围。
退出程序
INT21H
COMA:
XORDX,DX;清零DX,否则前面数会影响后面的结果
LEADX,STRG1
MOVAH,09H
INT21H
JMPNEXT
COMB:
XORDX,DX
LEADX,STRG2
MOVAH,09H
INT21H
JMPNEXT
COMC:
XORDX,DX
LEADX,STRG3
MOVAH,09H
INT21H
JMPNEXT
COMD:
XORDX,DX
LEADX,STRG4
MOVAH,09H
INT21H
JMPNEXT
COME:
XORDX,DX
LEADX,STRG5
MOVAH,09H
INT21H
JMPNEXT
COMF:
XORDX,DX
LEADX,STRG6
MOVAH,09H
INT21H
JMPNEXT
COMG:
XORDX,DX
LEADX,STRG7
MOVAH,09H
INT21H
JMPNEXT
COMH:
XORDX,DX
LEADX,STRG8
MOVAH,09H
INT21H
JMPNEXT
COMI:
XORDX,DX
LEADX,STRG9
MOVAH,09H
INT21H
JMPNEXT
COMJ:
XORDX,DX
LEADX,STRG10
MOVAH,09H
INT21H
JMPNEXT
COMK:
XORDX,DX
LEADX,STRG11
MOVAH,09H
INT21H
JMPNEXT
COML:
XORDX,DX
LEADX,STRG12
MOVAH,09H
INT21H
JMPNEXT
COMM1:
XORDX,DX
LEADX,STRG13
MOVAH,09H
INT21H
JMPNEXT
COMN:
XORDX,DX
LEADX,STRG14
MOVAH,09H
INT21H
JMPNEXT
COMO:
XORDX,DX
LEADX,STRG15
MOVAH,09H
INT21H
JMPNEXT
COMP:
XORDX,DX
LEADX,STRG16
MOVAH,09H
INT21H
JMPNEXT
COMQ:
XORDX,DX
LEADX,STRG17
MOVAH,09H
INT21H
JMPNEXT
COMR:
XORDX,DX
LEADX,STRG18
MOVAH,09H
INT21H
JMPNEXT
COMS:
XORDX,DX
LEADX,STRG19
MOVAH,09H
INT21H
JMPNEXT
COMT:
XORDX,DX
LEADX,STRG20
MOVAH,09H
INT21H
JMPNEXT
COMU:
XORDX,DX
LEADX,STRG21
MOVAH,09H
INT21H
JMPNEXT
COMV:
XORDX,DX
LEADX,STRG22
MOVAH,09H
INT21H
JMPNEXT
COMW:
XORDX,DX
LEADX,STRG23
MOVAH,09H
INT21H
JMPNEXT
COMX:
XORDX,DX
LEADX,STRG24
MOVAH,09H
INT21H
JMPNEXT
COMY:
XORDX,DX
LEADX,STRG25
MOVAH,09H
INT21H
JMPNEXT
COMZ:
XORDX,DX
LEADX,STRG26
MOVAH,09H
INT21H
JMPNEXT
CODESENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 作业
![提示](https://static.bingdoc.com/images/bang_tan.gif)