《微计算机原理(第2版)第四章课后习题答案潘名莲马争丁庆生编著》由会员分享,可在线阅读,更多相关《微计算机原理(第2版)第四章课后习题答案潘名莲马争丁庆生编著(17页珍藏版)》请在金锄头文库上搜索。
1、第四章 汇编语言程序设计4-1汇编语言程序设计的几个步骤是:解:编写汇编语言程序的过程基本上与编写高级语言程序的过程是相同的。(1)从实际问题抽象出数学模型;(2)确定解决该数学模型的方法,选择最佳算法;(3)画出流程图,根据算法把解决问题的思路和方法用图形表示出来:(4)分配内存工作单元和寄存器;(5)根据流程图编制程序;(6)上机调试,检测和排错。4-2 计算下列表达式的值(A1=5OH, Bl=20, Gl=2)。(1) A1*1OO+B1(2) Al MODG1+B1 (3) (Al+2) *Bl-2 (4) Bl/3 MOD 5(2) (5) (Al+3 ) * (Bl MODG1)
2、 (6) Al GTG1 (7) Bl AND 7(8) Bl SHL2+G1 SHR 1解:(1) 5020 (2) 20 (3) 1038 (4) 1(5) 0 (6) OFFFFH (7) 04H(8) 51H4-3已知数据段定义如下,设该段从03000H开始。DSEG SEGMENTARRAY1 DB2DUP(0, 1, ?)ARRAY2 DW 100 DUP (?)FHZ EQU 20HARRAY3 DB 10 DUP (0, 1, 4 DUP(2), 5)DSEG ENDS试用分析运算符 OFFSET、SEG、LENGTH、TYPE、SIZE 求出 ARRYI、ARRY2、ARRY
3、3 的段、偏移量和类型,以及它们的LENGTH和SIZE解:变量名OFFSETSEGTYPELENGTHSIZEARRY100300H122(2X1)ARRY206H0300H2100200(100X2)ARRY3206=0CEH0300HI1010(10X1)4A (略)4-5以下语句汇编后,变量CONI, CON2和CON3的内容分别是多少?Nl=10N2=5N3=3CONI00CONI DB (N1 AND N2 OR N3) GE 0FHCON2FFCON2 DW (N2 AND N1 XOR N3) LE 0FH00CON3 DB (N1 MOD N3) LT (N2 SHRI)CO
4、N3FF解:如图所小4-6设有一个已定义的数据段如下:DATA SEGMENTVARI DB ?, ?VAR2 DB ?, ?ADR DW VARI, VAR2DATA ENDS若要使ADR+2的字单元中存放内容为“0022H”,上述空白处应填入什么语句? 解: ORG 0020H4-7下述程序段执行后,寄存器CX, SI的内容是多少?ARRY DW 20 DUP (5) XOR AX,AXMOV CX, LENGTH ARRYMOV SI, SIZE ARRY-TYPE 解: (CX) =14H (SI) =26H4-8试定义一个结构,它应包括一个学生的下列信息:姓名、学号、及3门课程的成绩
5、。 然后给出3条机构预置语句,将3个学生的情况送入3个结构变量中。解:STUD STRUC;定义一个结构,结构名为STUDNAME! DB。:姓名字段NUM DB?;学号字段SCOR DB3 DUP(?);三门课程成绩字段STUD ENDSDATA SEGMENT:在数据段中通过三个结构变量引用,并赋值STUD! STUD VNHUMEING,, 3,88,79,91;结构变量名 STUD1STUD2 STUDZHANG XING,15,78, 83, 77 ;结构变量名 STUD2STUD3 STUDWANG YAN5, 12, 91, 92, 93;结构变量名 STUD3DATA ENDS
6、4-9试定义一条宏指令,它可以实现任一数据块的传送(假设无地址重叠),其源地址、目 的地址和块长度作为参数处理。解:根据要求,子程序的入口参数有:源数据区和目的数据区的首址以及数据块的大小(包含的 字节数)。假设参数传递采用固定内存单元传递方式。SADR一一源数据区首地址;DADR一一目的数据区首地址:SLENG数据块长度。程序如下:SMOVE MACRO SADR, DADR, SLENGASSUME CS; CODELDS SI, SADRLES DI, DADRMOV CX, SLENGCLDCMP SI, DIJA MOVESTDADD SI, CXDEC SIADD DI, CXDE
7、C DIMOVE: MOVSBLOOP MOVERETENDM4-10设VARI和VAR2为字变量,LAB为标号,试判断下列指令的正误,并改正:(l)ADD VARI VA2(2)JNZ(3)SUB AL, VARI(4)JMP NEAR LAB(5)JMP LABSI (6)MOV AL.VAR2解:(1)错,ADD的两个操作数不能同时为存储单元。改:MOV AX,公R1ADD AX,VAR2(2)错,JCC后面应该是标号,不应该是变量改:JNZ LAB(3)错,两个操作数不匹配改:SUB AX, VARI(4)错,缺少PTR运算符改:JMP NEAR PTR LAB(5)错,LAB与SI不
8、能相加改:JMP FAR PTR LAB 或者 JMP WORD PTR SI(6)错,操作数类型不匹配改:MOV AX.VAR24-11已知数据定义如下,问L1和L298等于多少?Bl DB1, 2, 3, 923,B2 DB 0LI EQU SB1L2 EQU B2B1解:Ll=$Bl=70=7,L2=B2Bl=60=6 4-12对于下列数据定义,指出以下指令的错误。Al DB?A2 DB 10KI EQU 1024(l)MOV Kb AX(2) MOV Ab AX(3) MOV BX,A1 MOV BX, 1000(4) CMP Ab A2(5) KI EQU 2048解:(1) KI为
9、名称,表示一立即数,不能做为目的操作数。(2) A1为字节型,类型不匹配(3)类型不匹配(4)源和目的操作数不能同为存储器操作数(5)对己经被EQU定义的K1,在本程序段不能二次定义结果Z仍4-13试编程计算Z=5X+3Y+1O.己知X, Y均放在数据段,其值由编程者自定。 放在数据段。解:DATA SEGMENTXDB10YDB5ZDW?DATA ENDSSTACK SEGMENT PARA STACK 4 STACK5DW 20H DUP (0)STACK ENDSCODE SEGMENTASSUME CSCODE,DS:DATA, SS: STACKMAIN PROC:FARPUSHDS
10、MOVAX, 0PUSHAXSTART: MOVAX, DATAMOVDS, AXMOVAL,XMOVBL, YMULBL;X*5MOVDX,AX;转存至DXMOVAL, YMOVBL, 3MULBL:Y*3,积在AX中ADDAL, 0AHADDAX. DXMOVZ,AX;结果仍放数据段RETMAIN ENDPSTARTCODE ENDS END4-14 (略)4-15 用查表法将存放于数据段中一个有序的十六进制数串(范围:0FH)翻译成 assh码表仍放于数据段中.解:DATA SEGMENTTAB DB 30H. 31H, 32H,36H, 37HDB38H, 39H. 41H,45H,
11、46HHEX DB 6ASC DB ?DATA ENDSSTACK1 SEGMENT PARA DW 20H DUP (0)STACK1 ENDSCODE SEGMENTASSUME CSCODE, DS:DATA, SS: STACK1BEGIN: MOVAX, DATAMOV DS, AXXOR AX. AX MOV AL, HEX ADD BX. AX MOV AL, BX MOV ASC, AL MOV AH, 4cH INT 21HMOV BX, OFFSET TAB :设置ASCII码表的基地址在BX中:要查找的一位十六进制数在AL中:基址+偏移置即可计算出该十六进制数asch码存
12、放地址:该地址单元的内容即为要查找的ASCII码;存放ASCII码至ASC字节单元CODE ENDSEND BEGIN4-16试编写一程序,把X和Y中的大者存入BIG单元。若乂=丫,则把其中之一存入BIG 单元。解:DATA SEGMENTX DW 1028Y DW 1446BIG DW ?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXMOV AX,XMOV BX,Y CMP AX, BX JGE STORE;取字数据X至AX;取字数据Y至BX;比较(AX)和(BX)XCHG AX. BX;
13、若(AX) (BX),则(AX)(BX)STORE: MOV BIG AXMOV AH, 4cHINT 21HCODE ENDS END START;存结果至BIG字单元;若(AX)全(BX),则转STORE处执行4-17试编制一程序,比较STRING 1和STRING2所含字符是否完全相同,若相同显示 “MATCH,反之,则显示“NO MATCH”。试编写该程序。解:DATA SEGMENTSTR1 DB COMPUTSTR2 DB CONPUTMYES DB MATCH, ODH. OAH, SDATA ENDSCODE SEGMENTASSUME CS: CODE. DS: DATAST
14、ART: MOVAX, DATAMOV DS, AXMOV CX, 6MOV SI, OFFSET STR1 ;设置字符串STR1的地址指针SIMOV DL OFFSET STR2 :设置字符串STR2的地址指针DICLDREPE CMPSB ;字符串一致时,重更比较,在两字串中找不相同字符JNE NO_SAME ;若有不相同字符,则转至NO_SAME处执行,否则顺序执行 SAME: MOV DX. OFFSET MYESMOV AH, 09H;显示字符串 “MATCH”INT 21HJMP ENDONO_SAME: MOV DX.OFFSET MNOMOV AH.O9H;显示字符串 “NO MATCH”INT 21HENDO: MOV AH, 4CHINT 21HCODE ENDSEND START4-18设数据段中有3个变量单元A、B和C中存放有3个数,若3个数都不为0,则求出此3个数之和存入SUM单元;若有一个数为