西南交大网络教育汇编语言程序设计第三次作业.doc
汇编语言程序设计 第三次作业11. 文件结尾的部分信息就没有被写入磁盘.从而造成写入的文件不完整。12. 下面的ASCIZ串有什么错误?PATH_NAME DB C:PROGRAMSTEST.DAT答:此ASCIZ串的最后少了一个全0字节.应改为:PATH_NAME DB C:PROGRAMSTEST.DAT, 013. 据定义如下: X1 DB 10H.100.1X2 DW 10H.100.1X3 DD ?COUNT EQU X3X1变量COUNT的值是 .其表示的意义是 。答: 9 X1和X2两个变量所占内存字节单元的个数。写为内存单元的个数也正确。如果写为字单元则为错误14. 执行指令MOV AX.0MOV AL.09HADD AL.4若要获得结果AX0103H.则在ADD指令之后.加一条 指令.若要获得结果AL13H.在ADD指令之后加一条 指令。答:DAA AAA15. 实现AL中高四位置1的指令为 。实现AL中高四位取反的指令为 。答: OR AL.0F0H XOR AL.0F0H16. 为中断向量区。答:最低1K字节 0-3FFH 0000开始的1K 字节以上三个答案都正确17. X、Y、Z是双精度数.他们分别存放在X、X+2、Y、Y+2、Z、Z+2的内存单元中.高位字存放在高位地址中.低位字存放在低位地址中.下列指令序列实现X+Y+24-Z W。并且用W和W+2单元存放运算结果: MOV AX.X MOV DX.X+2 ADD AX.Y ADC DX.Y+2 ADD AX.24 SUB AX.Z SUB DX.Z+2 MOV W.AX MOV W+2.DX分析以上指令序列.指出程序中出现的错误: ; 。答: 在ADD和SUB两条指令之间加上 ADC DX.0仅仅写出这条指令就正确把SUB DX.Z+2改成SBB DX.Z+2仅仅写出这条指令就正确18. 在数据段中有一个字符串.其长度是17.要求把他们传送到附加段中的一个缓冲区。 DATA SEGMENT MESS1 DB PERSONAL COMPUTER DATA ENDS EXTRA SEGMENT MESS2 DB 17 DUP<?> EXTRA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE, DS:DATA,ES:EXTRA START: PUSH DS SUB AX,AX PUSH AX LEA SI,MESS1 LEA DI,MESS2 CLD REP MOVSB RET MAIN ENDP CODE ENDS END START以上是完整的程序段.请分析主过程.修改主过程中的错误。1、 ;2、 ;3、 ;4、 ;5、 。答: MOV AX.DATAMOV DS.AXMOV AX.EXTRAMOV ES.AXMOV CX.17 只要写出以上5条指令就给分.每条指令1分。评分标准:指令中没有写出逗号、没有写对相应数据、写错操作码都视为错误答案。19. 已知主程序和子程序之间的调用如下:STACK SEGMENT DB 100 DUP<0>STACK ENDSCODE1 SEGMENTASSUME CS:CODE1,SS:STACKBEG: ¼MOV AX, 0A3BHMOV CX, 1234HCALL FAR PTR AA ;断点<IP>=1110H, <CS>=0200H¼CODE1 ENDSCODE2 SEGMENTASSUME CS:CODE2AA PROC FARPUSH AXPUSH CXBB: ¼RETAA ENDPCODE2 ENDSEND BEG画出执行到标号BB时,堆栈的情况图。答:1234H0A3BH1110H0200H 20. 寄存器的二进制数用十六进制数的形式在屏幕上显示出来。答:1、 CODE SEGMENTMAIN PROC FAR ASSUME CS:CODE START: PUSH DS SUB AX.AX PUSH AX MOV CH.4 ROTATE:MOV CL.4 ROL BX.CL MOV AL.BL AND AL.0FH ADD AL.30H CMP AL.3AH JL PRINTIT ADD AL.07H PRINTIT:MOV DL.AL MOV AH.2 INT 21H DEC CH JNZ ROTATE RETMAIN ENDPCODE ENDSEND START 21. 写出一段子程序.完成输出空行的功能。空出的行数在AX寄存器中。答:CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE START: PUSH DS SUB AX,AX PUSH AX MOV AX,5 OUTPUT:PUSH AX CALL DISP POP AX DEC AX 22. 假定DS=2000H.SS=1500H.SI=00A0H.BX=0100H.BP=0010H则MOV AX.BX+10的寻址方式是 ;操作数的物理地址是 。MOV AX.BPSI的寻址方式是 ;操作数的物理地址是 。答:寄存器相对寻址 物理地址:20110H 基址变址寻址 物理地址:150B0H23. 如果TABLE为数据段中0032H单元的符号名.其中存放的内容为1234H.则执行MOV AX.TABLE 后AX寄存器的内容是 ;执行LEA AX.TABLE后AX寄存器的内容是 。答:1234H 0032H24. 如果TABLE为数据段中0032H单元的符号名.其中存放的内容为1234H.则执行MOV AX.TABLE 后AX寄存器的内容是 ;执行LEA AX.TABLE后AX寄存器的内容是 。答:1234H 0032H25. 1、汇编语言程序上机操作的步骤是 ; ; ; 。答:用编辑器编写汇编源程序ASM文件用MASM命令编译ASM文件为OBJ文件用LINK命令连接OBJ文件为EXE文件在DOS下运行程序查看结果或者进入DEBUG查看结果26. 假设X和X+2单元的内容为双精度数P. Y和Y+2单元的内容为双精度数QX.Y为低位字.试说明下列程序段做什么工作? MOV DX.X+2 MOV AX.X ADD AX.X ADC DX.X+2 CMP DX.Y+2 JL L2 JG L1 CMP AX.Y JBE L2L1: MOV AX.1 JMP EXITL2: MOV AX.2EXIT:分析以上程序段。写出该程序段实现的功能: 。答:程序功能: AX =1 2PQ =2 2PQ 用语言描述也正确。27. MOV CL.4SHL DX.CLMOV BL.AHSHL AX.CLSHR BL.CLOR DL.BL分析以上程序段。写出该程序段实现的功能: 。答: 程序功能:把DX AX构成的双精度数左移四位28. 以下程序段实现从键盘输入一个十进制数并转换成二进制数.试分析程序并填写恰当的指令使程序完整。 MOV BX,0 NEWCHAR: INT 21H SUB AL,30H JL EXITCMP AL,9DJG EXIT XCHG AX,BXMOV CX,10D XCHG AX,BXADD BX,AXJMP NEWCHAR EXIT:RET答:MOV AH.1CBW MUL CX 29. 下列程序段实现计算V-X*Y+Z-540/X.并把结果的商存入AX.余数存入DX.其中X.Y.Z.V都是16位带符号数.已经分别装入了X.Y.Z.V单元中。试分析程序并填写恰当的指令使程序完整。 MOV AX.X IMUL Y MOV CX.AX MOV BX.DX MOV AX.Z CWD ADD CX.AX SUB CX.540 MOV AX.V SUB AX.CX SBB DX.BX IDIV X答: ADC BX.DXSBB DX.0CWD 平分标准:有写错指令操作码的不给分。30. 在ADDR单元中存放着数据Y.试编写一程序把Y中1的个数存入COUNT单元中。答: DATA SEGMENTADDR DW YCOUNT DW ?DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE .DS:DATA START: PUSH DS SUB AX.AX PUSH AX MOV AX.DATA MOV DS.AX MOV CX.0 MOV AX.ADDR REPEAT:TEST AX.0FFFFH JZ EXIT JNS SHIFT INC CX SHIFT:SHL AX.1 JMP RETEAT EXIT:MOV COUNT.CX RET MAIN ENDP CODE ENDS END START 31. 设有5个学生的成绩分别是76.69.84.90.55。试编写程序统计成绩在80100,6079以及60分以下人数的个数分别存放在COUNT开始的三个字节单元中。答:DATA SEGMENT ARRAY DB 76,69,84,90,55 COUNT DB 3 DUP<0>DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE ,DS:DATA START: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV CX,5 MOV SI,0 LOOP1: MOV AL,ARRAYSI CMP AL,80 JGE G80 CMP AL,60 JL L60 INC COUNT1 JMP L1 G80: INC COUNT0 JMP L1 L60: INC COUNT2 L1: INC SI LOOP LOOP1 RET MAIN ENDPCODE ENDSEND START 8 / 8