1、中国地质大学(北京)继续教育学院 2012 年 09 课程考试第 1 页(共 8 页) 汇编语言程序设计模拟题 一单项选择题1段寄存器( B )给定了当前可使用附加数据段的段首址。ADS BES CSS DCS2在语句“MOV AX,5BX+SI“中, 源操作采用的是( D )寻址方式。A. 直接 B. 寄存器间接 C. 变址 D. 基址加变址3SBB 指令的功能为( B ) 。A. (OPD)-(OPS)OPD B. (OPD)-(OPS)-CFOPDC. (OPS)-CFOPD D. (OPD)-CFOPD4若有符号数运算结果溢出,则( A )位置。AOF BCF CZF DSF5使用串操
2、作指令时,目的串一定要放在当前( C )中。A代码段 B数据段 C附加数据段 D堆栈段二填空题 1、 LOOP 指令的转移范围是 0255 个字节 。2、 如果 END 伪指令后面带有符号地址,这个符号地址即为该程序运行时的 启动地址 。3、 如果在当前堆栈段中用 SI 作指针,则应该用 SS: 进行说明4、 在使用 OUT 指令时,如外设端口地址大于 255,则应先把该地址送入 DX 寄存器中。5、已知(AX)、(BX)均为无符号数,在“CMP AX,BX”之后使用转移指令 JBE L _可使(AX)(BX)时转 L 处执行三改错题 1SAL AX,2 SAL AX,12. LEA POIN
3、T,BUF LEA SI,BUF3IDIV AX,10 MOV BX,10 IDIV BX4.POP BL POP BX5ADD BX,SI ADD BX,SI 6. CWD AX, DX CWD7MOV DX,5SI+DI MOV DX,5BX+DI 8. OUT DX, A MOV AL, A OUT DX,AL9STACK SEGMENT PARA PUBLIC STACK ;定义堆栈段STACK SEGMENT PARA STACK STACK10TEST AX,01H ;测试 AX 最高位 TEST AX,8000H11DEC DI DEC DIDEC WORD PTR DI12CW
4、D AX, DX CWD AX, DXCWD中国地质大学(北京)继续教育学院 2012 年 09 课程考试第 2 页(共 8 页) 13OUT DL, $ OUT DL, $MOV AL, $OUT DX,AL14. MOV SI,AL MOV SI,ALMOV SI,AX15. MOV CX, BX+BP MOV CX, BX+BP MOV CX, BX+SI 16. MOV DS, DATA MOV DS, DATAMOV AX, DATA17. SHL AX,3 SHL AX,3 SHL AX,CL 18. AND AX,CX AND AX,CXAND AX,BX19. 执行 DOS10
5、 号功能调用往 BUF 缓冲区输入字符串后,输入串首址应在 BUF+1 中。BUF+220. 若无符号数相加结果溢出,则 OF 位置 1。CF四简答题 1.简述宏指令与子程序的区别。答: 定义的方式不一样;执行的时间不一样,子程序是在运行.EXE 文件时被执行的,而宏指令是在汇编期间被执行的;参数传递的方式不同。2.已知(AX)=0FBADH,执行以下语句序列后, (AX)=?XCHG AH,ALOR AX,0FF00H答:(AX)=0FFFBH3如何计算待取出指令的物理地址?答:(IP)左移四位+(CS)4已知 AX 和 BX 中均为无符号数且需(AX)(BX)时转 NEXT 处执行:CMP
6、 AX,BX( ) NEXT可在括号内填入哪几种转移指令?答: JA 或 JEA5已知两数补码分别为:X1 补 =00010101B, X2补 =10100110B, 计算X1 补 X2 补 后, ZF和 SF 各为多少?答:ZF=0, SF=1 6. 已知(DX)=7AF8H,执行“OR DX,0F0F0H”后(DX)=?答:0FAF8H 7已知(SS)2000H, (SP)1000H ,栈顶的物理地址为多少?答:21000H 8. 如果需要往 STR 缓冲区输入字符串,在下列程序段的空白处应填入什么指令?TT MACRO A,B中国地质大学(北京)继续教育学院 2012 年 09 课程考试
7、第 3 页(共 8 页) LEA DX,AMOV AH,BINT 21HENDMSTR DB 80,0,80 DUP( 0)_答:TT STR, 10五编写程序段 1. 已知数据段如下:DATA SEGMENTDATA1 DW -7935,12BCH,0DATA2 DB -12,25HSTR0 DB DWCMLWOM $CM COUNT EQU $-STR0DATA ENDS请根据题目要求编写程序段。1) DATA2 中的全部数据压入堆栈中。2) 算(DATA1)(DATA1+2) DATA1DATA12、DATA+4 中。3) 请用串操作指令在 STR0 串中查找字符W 出现的次数 DL 。
8、4) 请写出将 STR0 字符串在显示器上当前光标位置输出的程序段。5) 判断 DATA1 中的第 15 位与第 7 位是否同时为 0,为 0 转 ZERO 处执行,否则返回DOS。1)MOV AL,DATA2CBWPUSH AXMOV AL,DATA2+1MOV AH,0PUSH AX2)MOV AX,DATA1IMUL DATA1+2MOV BX,AXMOV CX,DXMOV AX,DATA1CWDADD AX,BXADC DX,CXMOV DATA1+4,DXMOV DATA1+2,AX3)LEA DI,STR0MOV CX,COUNTMOV AL,WMOV DL,0P0: REPNE
9、SCASBCMP CX,0JE END0INC DLJMP P0END0:4)LEA DI,STR0MOV CX,COUNTA: MOV DL,DIINC DIMOV AH,2INT 21HLOOP A 5)MOV AX, DATA1AND AX,8080HJE ZEROMOV AH,4CHINT 21HZERO: 中国地质大学(北京)继续教育学院 2012 年 09 课程考试第 4 页(共 8 页) 2. 已知 D 盘 MASM 子目录下有一存在的文件 WAN. ASM,编写打开该文件的程序段,打开成功 0AX,否则,-1AX ,最后返回操作系统。答: F DB D:MASMWAN.ASM
10、,0LEA DX,FMOV AH,3DHMOV AL,2INT 21HJC ERRMOV AX,0JMP ROSERR: MOV AX,-1ROS: MOV AH,4CHINT 21H3. 已知数据段中有语句“A DW -160,0”,请分别用乘法指令和移位指令实现(A)*16 A 和 A+2 中(注:不考虑溢出) 。答: MOV AX,AMOV CX, 16IMUL CXMOV A,AXMOV A+2,DX MOV CL,4SAL A,CL4请写出分别将 AX、BH 中的有符号数和 CL 中的无符号数顺序压入系统堆栈的程序段。答:PUSH AX MOV AL,BH CBW PUSH AX M
11、OV CH,0 PUSH CX 七阅读程序并回答问题 1该程序的功能是什么? 2请写出子程序 SUBP 的入口参数和出口参数。 3若在子程序 SUBP 中漏写了“POP BX”,该子程序能正确返回吗?为什么? DATA SEGMENTOUTF DB 0AH,0DH,0,0,H,0AH,0DH,$DATA ENDS REP: MOV AH,1中国地质大学(北京)继续教育学院 2012 年 09 课程考试第 5 页(共 8 页) INT 21HCMP AL, 0JB EXITCMP AL, 9JA EXITLEA SI,OUTF+2CALL SUBPLEA DX,OUTFMOV AH,9INT 2
12、1HJMP REPEXIT: MOV AH,4CHINT 21HSUBP PROCPUSH BXMOV AH,0MOV BL,16DIV BLADD AL,30HMOV SI,ALINC SIADD AH,30HMOV SI,AHPOP BXRET SUBP ENDP答:1. 功能:等待从键盘输入一个字符,如为数字字符,则在下一行输出其十六进制的ASCII码,再等待输入下一字符;如为其它字符,则转结束。2. 入口参数: AL:存放从键盘输入的一个字符AH:被除数高位BL:要转换的进制(除数)SI:存放转换后的两位 ASCII 码指针出口参数: 无3. 不能返回,因为此时栈顶的内容是(BX),而
13、不是返回主程序的偏移地址八编程题 1. 往 BUF1 和 BUF2 两缓冲区中分别输入字符串,请使用串操作指令比较这两个串是否相等,如相等则在下一行显示“The two stringe are equal!”;如不相等则在下一行显示“The two stringe are not equal!” 说明: 画出主程序的流程图。 写出寄存器的使用分配情况。 写出关键语句的注释。中国地质大学(北京)继续教育学院 2012 年 09 课程考试第 6 页(共 8 页) 答:IO MACRO A,BLEA DX,AMOV AH,BINT 21HENDMDATA SEGMENT BUF1 DB 80,0,8
14、0 DUP(0)BUF2 DB 80,0,80 DUP(0)T1 DB 0AH,0DH, the two stringe equal !T2 DB 0AH,0DH, the two stringe not equal !DATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME CODE:CS,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AX 送数据段首址MOV ES,AXIO BUF1,10 输入两个字符串IO BUF2,10MOV CL,BUF1+1MOV
15、 BL,BUF2+1 比较两串长度是否相等CMP CL,BL JNE NO_EQU ; 不等转 NO_EQULEA SI,BUF1LEA DI,BUF2MOV CH,0 长度相等,则比较两串字符是否相等REPZ CMPSBJNE NO_EQU ; 不等转 NO_EQUIO T1,9 ; 显示两串相等JMP EXITNO_EQU: IO T2,9 ; 显示两串不相等EXIT: MOV AH,41H ; 返回 DOSINT 21HCODE ENDSEND START2. 在以 ARR 为首址的数组中存放着若干个十六位无符号非 0 数,最后以 0 作结束标志。统计该组数中奇数的个数送 ODD 单元、
16、偶数的个数送 EVEN0 单元中。试编其程序。 要求:1. 画程序框图 2. 编写源程序 寄存器使用分配:SI:取原串字符指针DI:取目的串字符指针BL:存放 BUF2 串长度CX:存放 BUF1 串长度DX:DOS 中断调用中国地质大学(北京)继续教育学院 2012 年 09 课程考试第 7 页(共 8 页) 3. 写出寄存器的使用分配情况 4. 写出关键语句的注释。 答:DATA SEGMENTARR DW 1,2,3,4,5,6,7,8,9,0;已知数组ODD DW 0 ;奇数个数单元EVEN0 DW 0 ;偶数个数单元DATA ENDSSTACK SEGMENT STACKDB 200
17、 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXLEA SI,ARRMOV CX,0 ;偶数计数器MOV DX,0 ;奇数计数器NEXT: MOV AX,SI;取一待判断的数送 AXADD SI,2CMP AX,0 JE PP ;如该数为 0 转结束处理AND AX,1 ;如不为 0,判断最后一位是否为 0JE EVEN1 ;为 0,转偶数计数INC DX ;不为 0,奇数计数器加 1JMP NEXT ;转取下一数EVEN1:INC CX ;偶数计数器加 1JMP NEXT ;转取下一数PP: MOV ODD,DX ;保存奇数计数MOV EVEN0,CX;保存偶数计数MOV AH,4CHINT 21HCODE ENDSEND START寄存器使用分配:SI: 取数指针AX: 中间寄存器CX: 偶数计数器DX: 奇数计数器中国地质大学(北京)继续教育学院 2012 年 09 课程考试第 8 页(共 8 页) 程序框图开始取一数AX( AX)=0?(DX)+1DXNY结束ARRSI,0CX,0DX(AX)为偶数否?(CX)+1CXY DXODD,CXEVEN0N