文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言程序设计模拟题

汇编语言程序设计模拟题

《汇编语言程序设计》模拟题(补)

一.单项选择题

1.段寄存器(B)给定了当前可使用附加数据段的段首址。

A.DS B.ES C.SS D.CS

2.在语句"MOV AX,5[BX+SI]"中, 源操作采用的是(D)寻址方式。

A. 直接

B. 寄存器间接

C. 变址

D. 基址加变址

3.SBB指令的功能为(B)。

A. (OPD)-(OPS)→OPD

B. (OPD)-(OPS)-CF→OPD

C. (OPS)-CF→OPD

D. (OPD)-CF→OPD

4.若有符号数运算结果溢出,则(A)位置1。

A.OF B.CF C.ZF D.SF

5.使用串操作指令时,目的串一定要放在当前( C )中。

A.代码段B.数据段C.附加数据段D.堆栈段

二.填空题

1、LOOP指令的转移范围是0-255个字节。

2、如果END伪指令后面带有符号地址,这个符号地址即为该程序运行时的启动地址。

3、如果在当前堆栈段中用SI作指针,则应该用SS:进行说明

4、在使用OUT指令时,如外设端口地址大于255,则应先把该地址送入DX寄存器中。

5、已知(AX)、(BX)均为无符号数,在“CMP AX,BX”之后使用转移指令JBE L _可使

(AX) (BX)时转L处执行

三.改错题

1.SAL AX,2 SAL AX,1

2. LEA POINT,BUF LEA SI,BUF

3.IDIV AX,10 MOV BX,10

IDIV BX

4.POP BL POP BX

5.ADD [BX],[SI] ADD BX,[SI]

6. CWD AX,DX CWD

7.MOV DX,5[SI+DI] MOV DX,5[BX+DI]

8. OUT DX,…A?MOV AL,…A?

OUT DX,AL

9.STACK SEGMENT PARA PUBLIC …STACK ;定义堆栈段

STACK SEGMENT PARA STACK …STACK?

10.TEST AX,01H ;测试AX最高位TEST AX,8000H

11.DEC [DI] DEC [DI]

DEC WORD PTR [DI]

12.CWD AX, DX CWD AX, DX

CWD

13.OUT DL, …$? OUT DL, …$?

MOV AL, …$?

OUT DX,AL

14. MOV SI,AL MOV SI,AL

MOV SI,AX

15. MOV CX, [BX+BP] MOV CX, [BX+BP]

MOV CX, [BX+SI]

16. MOV DS, DA TA MOV DS, DATA

MOV AX, DATA

17. SHL AX,3 SHL AX,3

SHL AX,CL

18. AND AX,[CX] AND AX,[CX]

AND AX,[BX]

19. 执行DOS10号功能调用往BUF缓冲区输入字符串后,输入串首址应在BUF+1中。BUF+2

20. 若无符号数相加结果溢出,则OF位置1。

CF

四.简答题

1.简述宏指令与子程序的区别。

答:定义的方式不一样;

执行的时间不一样,子程序是在运行.EXE文件时被执行的,而宏指令是在汇编期间被执行的;

参数传递的方式不同。

2.已知(AX)=0FBADH,执行以下语句序列后,(AX)=?

XCHG AH,AL

OR AX,0FF00H

答:(AX)=0FFFBH

3.如何计算待取出指令的物理地址?

答:(IP)左移四位+(CS)

4.已知AX和BX中均为无符号数且需(AX)>(BX)时转NEXT处执行:

CMP AX,BX

()NEXT

可在括号内填入哪几种转移指令?

答:JA或JEA

5.已知两数补码分别为:[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

LEA DX,A

MOV AH,B

INT 21H

ENDM

STR DB 80,0,80 DUP(0)

__________

答:TT STR, 10

五.编写程序段

1. 已知数据段如下:

DATA SEGMENT

DATA1 DW -7935,12BCH,0

DATA2 DB -12,25H

STR0 DB …DWCMLWOM $CM ┅?

COUNT EQU $-STR0

DATA ENDS

请根据题目要求编写程序段。

1)DATA2中的全部数据压入堆栈中。

2)算(DATA1)×(DA TA1+2)+DATA1→DATA1+2、DATA+4中。

3)请用串操作指令在STR0串中查找字符…W?出现的次数→DL。

4)请写出将STR0字符串在显示器上当前光标位置输出的程序段。

5)判断DATA1中的第15位与第7位是否同时为0,为0转ZERO处执行,否则返回DOS。

1)MOV AL,DATA2 CBW

PUSH AX

MOV AL,

DATA2+1

MOV AH,0

PUSH AX 2)MOV AX,DATA1

IMUL DATA1+2

MOV BX,AX

MOV CX,DX

MOV AX,DATA1

CWD

ADD AX,BX

ADC DX,CX

MOV DATA1+4,DX

MOV DATA1+2,AX

3)LEA DI,STR0

MOV CX,COUNT

MOV AL,?W?

MOV DL,0

P0: REPNE SCASB

CMP CX,0

JE END0

INC DL

JMP P0

END0:……

4)LEA DI,STR0

MOV CX,COUNT A: MOV DL,[DI]

INC DI

MOV AH,2

INT 21H

LOOP A 5)MOV AX,DATA1 AND AX,8080H

JE ZERO

MOV AH,4CH

INT 21H ZERO: ……

2. 已知D盘MASM子目录下有一存在的文件W AN. ASM,编写打开该文件的程序段,打开成功0→AX,否则,-1→AX,最后返回操作系统。

答:┇

F DB …D:\MASM\WAN.ASM?,0

LEA DX,F

MOV AH,3DH

MOV AL,2

INT 21H

JC ERR

MOV AX,0

JMP ROS

ERR:MOV AX,-1

ROS:MOV AH,4CH

INT 21H

3. 已知数据段中有语句“A DW -160,0”,请分别用乘法指令和移位指令实现(A)*16 →A和A+2中(注:不考虑溢出)。

答:① MOV AX,A

MOV CX,16

IMUL CX

MOV A,AX

MOV A+2,DX

② MOV CL,4

SAL A,CL

4.请写出分别将AX、BH中的有符号数和CL中的无符号数顺序压入系统堆栈的程序段。答:PUSH AX

MOV AL,BH

CBW

PUSH AX

MOV CH,0

PUSH CX

七.阅读程序并回答问题

1.该程序的功能是什么?

2.请写出子程序SUBP的入口参数和出口参数。

3.若在子程序SUBP中漏写了“POP BX”,该子程序能正确返回吗?为什么?

DATA SEGMENT

OUTF DB 0AH,0DH,0,0,?H?,0AH,0DH,?$?

DATA ENDS

REP: MOV AH,1

INT 21H

CMP AL,?0?

JB EXIT

CMP AL,?9?

JA EXIT

LEA SI,OUTF+2

CALL SUBP

LEA DX,OUTF

MOV AH,9

INT 21H

JMP REP

EXIT: MOV AH,4CH

INT 21H

SUBP PROC

PUSH BX

MOV AH,0

MOV BL,16

DIV BL

ADD AL,30H

MOV [SI],AL

INC SI

ADD AH,30H

MOV [SI],AH

POP BX

RET

SUBP ENDP

答:1. 功能:等待从键盘输入一个字符,如为数字字符,则在下一行输出其十六进制的ASCII 码,再等待输入下一字符;如为其它字符,则转结束。

2. 入口参数:AL:存放从键盘输入的一个字符

AH:被除数高位

BL:要转换的进制(除数)

SI:存放转换后的两位ASCII码指针

出口参数:无

3. 不能返回,因为此时栈顶的内容是(BX),而不是返回主程序的偏移地址

八.编程题

1. 往BUF1和BUF2两缓冲区中分别输入字符串,请使用串操作指令比较这两个串是否相等,如相等则在下一行显示“The two stringe are equal!”;如不相等则在下一行显示“The two stringe are not equal!”

说明:①画出主程序的流程图。

②写出寄存器的使用分配情况。

③写出关键语句的注释。

答:IO MACRO A ,B

LEA DX ,A MOV AH ,B

INT 21H

ENDM

DATA SEGMENT

BUF1 DB 80,0,80 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 ENDS

STACK SEGMENT STACK

DB 200 DUP (0)

STACK ENDS

CODE SEGMENT

ASSUME CODE :CS ,DS :DATA ,ES :DATA ,SS :STACK

START : MOV AX ,DATA

MOV DS ,AX 送数据段首址 MOV ES ,AX

IO BUF1,10 输入两个字符串 IO BUF2,10

MOV CL ,BUF1+1

MOV BL ,BUF2+1 比较两串长度是否相等 CMP CL ,BL

JNE NO_EQU ; 不等转NO_EQU LEA SI ,BUF1 LEA DI ,BUF2

MOV CH ,0 长度相等,则比较两串字符是否相等 REPZ CMPSB

JNE NO_EQU ; 不等转NO_EQU IO T1,9 ; 显示两串相等 JMP EXIT

NO_EQU : IO T2,9 ; 显示两串不相等 EXIT : MOV AH ,41H ; 返回DOS

INT 21H

CODE ENDS

END START

2. 在以ARR 为首址的数组中存放着若干个十六位无符号非0数,最后以0作结束标志。统计该组数中奇数的个数送ODD 单元、偶数的个数送EVEN0单元中。试编其程序。 要求:1. 画程序框图

2. 编写源程序

3. 写出寄存器的使用分配情况

4. 写出关键语句的注释。

寄存器使用分配: SI :取原串字符指针 DI :取目的串字符指针

BL :存放BUF2串长度 CX :存放BUF1串长度 DX :DOS 中断调用

答:DATA SEGMENT

ARR DW 1,2,3,4,5,6,7,8,9,0;已知数组

ODD DW 0 ;奇数个数单元EVEN0 DW 0 ;偶数个数单元DATA ENDS

STACK SEGMENT STACK

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA

MOV DS,AX

LEA SI,ARR

MOV CX,0 ;偶数计数器

MOV DX,0 ;奇数计数器

NEXT: MOV AX,[SI];取一待判断的数送AX

ADD SI,2

CMP AX,0

JE PP ;如该数为0转结束处理

AND AX,1 ;如不为0,判断最后一位是否为0

JE EVEN1 ;为0,转偶数计数

INC DX ;不为0,奇数计数器加1

JMP NEXT ;转取下一数

EVEN1:INC CX ;偶数计数器加1

JMP NEXT ;转取下一数

PP: MOV ODD,DX ;保存奇数计数

MOV EVEN0,CX;保存偶数计数

MOV AH,4CH

INT 21H

CODE ENDS

END START

寄存器使用分配:

SI: 取数指针

AX: 中间寄存器

CX: 偶数计数器

DX: 奇数计数器

程序框图

相关文档
相关文档 最新文档