新编汇编语言程序设计四五章习题参考解答讲解Word下载.docx
《新编汇编语言程序设计四五章习题参考解答讲解Word下载.docx》由会员分享,可在线阅读,更多相关《新编汇编语言程序设计四五章习题参考解答讲解Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEADX,MESS1
CALLREADINT;
输入X的值
CMPAX,-2
JGEL2
L1:
SUBAX,3;
AX←X-3
JMPDONE
L2:
CMPAX,3
JGL3
MOVBX,AX
ADDAX,AX;
AX←2X
AX←4X
ADDAX,BX;
AX←5X
ADDAX,6;
AX←5X+6
L3:
MOVAX,2;
AX←2
DONE:
LEADX,MESS2
CALLWRITEINT;
输出Y的值
CALLCRLF
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
4.14编写程序,求10元素字数组LIST中绝对值最小的数,存入MIN单元。
DATASEGEMNT
LISTDW-56,+12,88,-126,-5,16,32,-99,72,-18
MINDW?
MINABSDW?
MOVAX,LIST
MOVMIN,AX;
将数组第一个元素假设为绝对值最小的数
MOVMINABS,32767;
最小的绝对值假设为32767
LEASI,LIST
MOVCX,10
AGAIN:
MOVAX,[SI]
CMPAX,0
JGESKIP1
NEGAX;
求绝对值
SKIP1:
CMPAX,MINABS;
绝对值与假设的最小绝对值比较
JGESKIP2;
假设的绝对值较小,跳过
MOVMINABS,AX;
保存新的最小绝对值
MOVAX,[SI];
取出新的绝对值最小的数
MOVMIN,AX;
保留新的绝对值最小的数
SKIP2:
ADDSI,2
LOOPAGAIN
MOVAX,4C00H
说明:
一定要预设最小的绝对值和绝对值最小的数,而且这个绝对值最小的数必须来自LIST数组。
4.16一个有符号字数组以0为结束标志,求这个数组的:
最大值、最小值、平均值。
LISTDW-56,+12,88,-126,-5,16,32,-99,72,-18,0
MAXDW?
AVGDW?
MOVMIN,32767;
将32767假设为最小的数
MOVMAX,-32768;
将-32768假设为最大的数
MOVAVG,0;
AVG用作累加器,清零
MOVCX,0
JZDONE;
找到零元素,转DONE结束处理
INCCX;
纪录非零元素个数
ADDAVG,AX;
累加
CMPAX,MIN
MOVMIN.AX;
比预设最小值还小,保留
SKIP1:
CMPAX,MAX
JLESKIP2
MOVMAX,AX;
比预设最大值还大,保留
JMPAGAIN
JCXZNULL;
元素个数为零,转NULL处理
MOVAX,AVG
CWD
IDIVCX
MOVAVG,AX;
计算平均值
JMPEXIT
NULL:
MOVMIN,0;
元素个数为0,将“最大值”、“最小值”
MOVMAX,0;
“平均值”清零
MOVAVG,0
EXIT:
MOVAX,4C00H
4.21编写程序,把一个30个元素的有符号字数组ARRAY按照各元素的正负分别送入数组P和M,正数和零元素送P
数组,负数送M数组。
ARRAYDW30DUP(?
);
汇编之前置入数据
PDW30DUP(?
)
MDW30DUP(?
DATAENDS
LEABX,ARRAY;
ARRAY数组指针
MOVSI,0;
P数组指针
MOVDI,0;
M数组指针
MOVCX,30
ONE:
MOVAX,[BX];
从ARRAY数组取出一个数据
ANDAX,AL
JGEPLUS;
正数、零转PLUS
MINUS:
MOVM[DI],AX;
负数存入M数组
ADDDI,2
JMPNEXT
PLUS:
MOVP[SI],AX;
正数、零存入P数组
ADDSI,2
NEXT:
ADDBX,2
LOOPONE
4.30编写程序,输入N,计算:
S=1*2+2*3+……+(N-1)*N
CODESEGMENT
CODE
MESS1DB0DH,0AH,‘InputNplease:
MESS2DB0DH,0AH,‘S=$’
PUSHCS
POPDS
LEADX,MESS1
CALLREADDEC;
输入N
MOVCX,AX
XORBX,BX;
BX用作累加器
MOVAX,CX
MOVSI,AX
DECSI
MULSI;
计算J*(J-1)
ADDBX,AX;
MOVAX,BX
CALLWRITEDEC;
输出结果
CALLCRLF
4.31编写程序,输入N,输出如下矩阵(设N=5)
11111
22221
33321
44321
54321
设I为行(1~5),J为列(1~5),则(I,J)位置上的数据为:
I>
(6-J)?
I:
6-J。
INCLUDEYLIB.H
MOVSI,1;
SI为行号
ROW:
MOVCX,5;
CX为6-列号
COL:
CMPSI,CX;
判断当前位置
JBUP
DOWN:
MOVAX,CX;
下半三角,取6-列号
JMPOUTPUT
UP:
MOVAX,SI;
上半三角,取行号
OUTPUT:
MOVDX,-1
CALLWRITEDEC;
输出一个数据
LOOPCOL
CALLCRLF;
结束本行
INCSI;
修改行号
CMPSI,5
JBEROW;
未满5行,继续
习题五
5.4阅读下面的程序,指出该程序计划完成的功能,同时指出程序中尚存在的错误。
CODESEGMENT
ASSUME:
CS:
START:
MOVCX,20
LOOP0:
CALLPRINTSPACE
LOOPLOOP0
MOVAH,4CH
INT21H
PRINTSPACEPROCNEAR
MOVCX,40;
该行上面添加:
PUSHCX
PSLOOP:
MOVAL,‘’
MOVAH,02H
LOOPPSLOOP
MOVAL,0AH
MOVAL,0DH
INT21H;
该行下面添加:
POPCX
RET
PRINTSPACEENDP
CODEENDS
功能:
输出20行空行,每行有40个空格。
5.6阅读下面的子程序,叙述它完成的功