汇编实验报告DLWord格式.docx
《汇编实验报告DLWord格式.docx》由会员分享,可在线阅读,更多相关《汇编实验报告DLWord格式.docx(16页珍藏版)》请在冰豆网上搜索。
段寄存器定义
MOVAL,W;
开始计算
SUBAL,[X];
W-X
CBW;
将AL符号扩展为AH
MOVBL,5
IDIVBL;
(W-X)/5
SUBAL,[Y]
MOVBL,R
ADDBL,2;
R+2
IMULBL;
最后的乘法运算
MOV[Z],AX;
将最后的结果送给Z
MOVAH,4CH;
返回DOS
INT21H
CODEENDS
3.程序运行结果。
2.试编写一个程序,测试某数是否是奇数。
如该数是奇数,则把DL的第0位置1,否则将该位置0。
XDB9
YDB?
MOVDS,AX
MOVAL,[X]
SHRDL,1
SHRAL,1
RCLDL,1
MOV[Y],DL
MOVAH,4CH
INT21H
ENDSTART
实验2分支及循环程序设计
2.掌握分支程序和循环程序的设计方法。
根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。
1.键入一数,判断该数是否在0<
X<
9范围内,是输出标志0,不是输出-1。
2.源程序清单
DATASEGMENT;
数据段
XDW0;
存放输入的数
START:
MOVAX,DATA;
将数据送入DS
INPUT:
MOVAH,1;
输入字符
CMPAL,30H;
比0小不接受
JBINPUT
CMPAL,3AH;
比9大不接受
JNBINPUT
SUBAL,30H;
将字符转换为整数
MOVAH,0
MOVX,AX;
将输入的正数赋给X
CALLENDL;
换行
MOVAX,X
CMPAX,3;
和3比较
JBNT;
比3小跳到NT
CMPAX,7;
和7比较
JANT;
比7大跳到NT
JMPIS;
否则跳到IS
IS:
MOVBL,'
0'
;
在3-7之间,显示0
MOVDL,BL
MOVAH,2
JMPEXIT;
跳到EXIT
NT:
-'
不在3-7之间,显示-1
MOVDL,BL;
先显示'
再显示'
1'
EXIT:
返回dos
;
-------------------------
ENDLPROC;
换行子程序
MOVDL,13;
回车换行
MOVDL,10
RET
ENDLENDP
---------------------------
ENDSTART
2.程序运行结果。
2.试编程统计数据区中正数、零和负数的个数。
DATASEGMENT
BUFDB-1,-2,-3,-4,-11,0,11,22,32,112;
定义一组数据
COUNTEQU$-BUF
C1DB0;
正数的个数
C2DB0;
负数的个数
C3DB0;
0的个数
MOVSI,OFFSETBUF;
BUF首地址地址传送给SI
XORDH,DH;
DI高位清零
MOVCX,COUNT;
获取数据的个数,送给CX
NEXT:
MOVAL,[SI]
CMPAL,0
JZL1;
结果为零转移到L1
JGL2;
结果大于零转移到L2
INCC2;
将将负数的个数增加1
JMPSTO;
跳转到STO
L1:
INCC3;
将0的个数增加1
JMPSTO
L2:
INCC1;
将正数的个数增加1
STO:
INCSI;
指针指向下一个数据
LOOPNEXT;
直到CX为0结束
MOVDL,C1;
输出正数的个数
ADDDL,30H
MOVAH,02
MOVDL,C2;
输出负数的个数
MOVDL,C3;
输出0的个数
3.编程求无符号数字节序列中最大值和最小值。
NUMSDB21,1,33,55;
定定义一组无符号的数
COUNTEQU$-NUMS;
计算出数据的个数
MAXDB?
存放最大值
MINDB?
存放最小值
MOVSI,OFFSETNUMS;
NUMS首地址送给SI
MOVCX,COUNT;
将数据个数送给CX
MOVAL,[SI]
MOVMAX,AL;
初始化
MOVMIN,AL
INCSI
BEGIN:
MOVAL,[SI];
开始通过下标取数
CMPAL,MAX;
和最大数比较
JAMOREMAX;
数据更大跳转到MOREMAX
CMPAL,MIN;
和最小的数比较
JBMOREMIN;
数据更小跳转到MOREMIN
JMPRE
MOREMAX:
将更大的数赋给MAX
MOREMIN:
MOVMIN,AL;
将更小的数赋给MIN
RE:
INCSI;
指针指向下一个数据T
LOOPBEGIN;
循环直到CX=0
MOVAL,MAX;
输出最大值
MOVCL,04H
SHRAL,CL
MOVDL,AL
MOVAL,MAX
ANDAL,00FH
MOVDL,AL
MOVDL,20H;
输出空格
MOVAL,MIN;
输出最小值
MOVAL,MIN
4.程序运行结果。
4.编写汇编程序,统某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。
STRINGDB'
g3tRfdtfTR34'
定义一组字符串
COUNTEQU$-STRING;
获得字符串的字符数
CHARCOUNTDB0;
记录字母的个数
装载数据
MOVSI,OFFSETSTRING;
STRING首地址送给SI
字符数COUNT送给CX
开始通过下标取字符
CMPAL,'
a'
JBCONTINUE;
比a小时,转CONTINUN继续和A,Z比较
z'
比z小时
JARE
INCCHARCOUNT;
是小写字母,加1
JMPSHORTRE;
无条件跳转
CONTINUE:
A'
和A比较
JBRE;
Z'
和Z比较
JARE;
是大写字母,也加1
取下一个字符
CX不为零时循环
MOVAL,CHARCOUNT
ADDAL,30H;
加30H得到ASCAII码
MOVDL,AL;
将统计的字符个数显示出来
5.调试过程中遇到的问题和解决的方法。
这次调试通过参照实验指导书,了解到了汇编实验的基本操作流程,汇编作为计算机的一门基础语言所具有的优越性,在调试的过程中也遇到了许多的问题,比如在做循环的时候不能够画出流程图。