资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第4章 汇编语言程序设计4-1 汇编语言程序设计的几个步骤是: 解:编写汇编语言程序的过程基本上与编写高级语言程序的过程是相同的。(1) 从实际问题抽象出数学模型;(2) 确定解决该数学模型的方法,选择最佳算法;(3) 画出流程图,根据算法把解决问题的思路和方法用图形表示出来;(4) 分配内存工作单元和寄存器;(5) 根据流程图编制程序;(6) 上机调试,检测 和排错。4-2 计算下列表达式的值(A1=50H,B1=20,G1=2)。(1) A1*100+B1 (2)A1 MOD G1+B1 (3)(A1+2)*B1-2 (4)B1/3 MOD 5(2) (5)(A1+3 )*(B1 MOD G1) (6)A1 GT G1 (7)B1 AND 7 (8) B1 SHL 2+G1 SHR 1解:(1)5020 (2)20 (3)1038 (4)1 (5)0 (6)0FFFFH (7)04H (8)51H4-3 已知数据段定义如下,设该段从03000H开始。DSEG SEGMENTARRAY1 DB 2 DUP (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求出ARRY1、ARRY2、ARRY3的段、偏移量和类型,以及它们的 LENGTH和SIZE解:变量名OFFSETSEGTYPELENGTHSIZEARRY100300H122(21)ARRY206H0300H2100200(1002)ARRY3206=0CEH0300H11010(101)4-4 (略)4-5 以下语句汇编后,变量CON1,CON2和CON3的内容分别是多少?N1=10CON100CON2FF00CON3FFN2=5N3=3CON1 DB (N1 AND N2 OR N3) GE 0FHCON2 DW (N2 AND N1 XOR N3) LE 0FHCON3 DB (N1 MOD N3) LT (N2 SHR1)解:如图所示4-6 设有一个已定义的数据段如下:DATA SEGMENT VAR1 DB ?, ?VAR2 DB ?, ?ADR DW VAR1, VAR2DATA ENDS 若要使ADR+2的字单元中存放内容为“0022H”,上述空白处应填入什么语句?解: ORG 0020H4-7 下述程序段执行后,寄存器CX,SI的内容是多少?ARRY DW 20 DUP (5) XOR AX, AX MOV CX, LENGTH ARRY MOV SI, SIZE ARRY-TYPE解: (CX)=14H (SI)=26H 4-8 试定义一个结构,它应包括一个学生的下列信息:姓名、学号、及3门课程的成绩。然后给出3条机构预置语句,将3个学生的情况送入3个结构变量中。解:STUD STRUC ;定义一个结构,结构名为STUDNAME1 DB ;姓名字段NUM DB ? ;学号字段SCOR DB 3 DUP (?) ;三门课程成绩字段STUD ENDSDATA SEGMENT ;在数据段中通过三个结构变量引用,并赋值STUD1 STUD ;结构变量名STUD1STUD2 STUD ;结构变量名STUD2STUD3 STUD ;结构变量名STUD3DATA ENDS4-9 试定义一条宏指令,它可以实现任一数据块的传送(假设无地址重叠),其源地址、目的地址和块长度作为参数处理。解:根据要求,子程序的入口参数有:源数据区和目的数据区的首址以及数据块的大小(包含的字节数)。假设参数传递采用固定内存单元传递方式。SADR源数据区首地址;DADR目的数据区首地址;SLENG数据块长度。程序如下:SMOVE MACRO SADR, DADR, SLENG ASSUME CS; CODE LDS SI, SADR LES DI, DADR MOV CX, SLENG CLD CMP SI, DI JA MOVE STD ADD SI, CX DEC SI ADD DI, CX DEC DIMOVE: MOVSB LOOP MOVE RET ENDM4-10 设VAR1和VAR2为字变量,LAB为标号,试判断下列指令的正误,并改正:(1)ADD VAR1 VA2 (2)JNZ VAR1 (3)SUB AL, VAR1(4)JMP NEAR LAB (5)JMP LABSI (6)MOV AL, VAR2解:(1)错,ADD的两个操作数不能同时为存储单元。 改:MOV AX, VAR1 ADD AX, VAR2(2)错,JCC后面应该是标号,不应该是变量 改:JNZ LAB(3)错,两个操作数不匹配 改:SUB AX, VAR1(4) 错,缺少PTR运算符 改:JMP NEAR PTR LAB (5) 错,LAB与SI不能相加改:JMP FAR PTR LAB 或者 JMP WORD PTR SI (6) 错,操作数类型不匹配 改:MOV AX, VAR24-11 已知数据定义如下,问L1和L298等于多少?B1 DB 1, 2, 3, 123B2 DB 0L1 EQU $B1L2 EQU B2B1解:L1=$B1=70=7, L2=B2B1=60=64-12 对于下列数据定义,指出以下指令的错误。A1 DB ?A2 DB 10K1 EQU 1024 (1) MOV K1, AX (2) MOV A1, AX (3) MOV BX, A1 MOV BX, 1000 (4) CMP A1, A2 (5) K1 EQU 2048解:(1) K1为名称,表示一立即数,不能做为目的操作数。(2) A1为字节型,类型不匹配(3) 类型不匹配(4) 源和目的操作数不能同为存储器操作数(5) 对已经被EQU定义的K1,在本程序段不能二次定义4-13 试编程计算Z=5X+3Y+10.已知X,Y均放在数据段,其值由编程者自定。结果Z仍放在数据段。解:DATA SEGMENTX DB 10Y DB 5Z DW ?DATA ENDSSTACK SEGMENT PARA STACK STACK DW 20H DUP (0)STACK ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS: STACKMAIN PROC FAR PUSH DS MOV AX, 0 PUSH AXSTART: MOV AX, DATA MOV DS, AX MOV AL, X MOV BL, Y MUL BL ;X*5 MOV DX, AX ;转存至DX MOV AL, Y MOV BL, 3 MUL BL ;Y*3,积在AX中 ADD AL, 0AH ADD AX, DX MOV Z, AX ;结果仍放数据段 RETMAIN ENDPCODE ENDS END START4-14 (略)4-15 用查表法将存放于数据段中一个有序的十六进制数串 (范围:0FH)翻译成ASSII码表仍放于数据段中.解:DATA SEGMENTTAB DB 30H, 31H, 32H, ,36H, 37H DB 38H, 39H, 41H, ,45H, 46HHEX DB 6ASC DB ?DATA ENDSSTACK1 SEGMENT PARA ATACK DW 20H DUP (0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS: STACK1BEGIN: MOV AX, DATA MOV DS, AX MOV BX, OFFSET TAB ;设置ASCII码表的基地址在BX中 XOR AX, AX MOV AL, HEX ;要查找的一位十六进制数在AL中 ADD BX, AX ;基址+偏移置即可计算出该十六进制数ASCII码存放地址 MOV AL, BX ;该地址单元的内容即为要查找的ASCII码 MOV ASC, AL ;存放ASCII码至ASC字节单元 MOV AH, 4CH INT 21HCODE ENDS END BEGIN4-16 试编写一程序,把X和Y中的大者存入BIG单元。若X=Y,则把其中之一存入BIG单元。解:DATA SEGMENTX DW 1028Y DW 1446BIG DW ?DATA ENDSCODE SEGMENT
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号