您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页微机原理第三四章练习题

微机原理第三四章练习题

来源:爱go旅游网
第三四章练习题

一、填空题:

1、下述程序段执行后(A)=_______________,(B)=________________;设程序段执行前SP=0200H,执行后SP=____________________。

A DW 1234H B DW 5678H ...

PUSH A PUSH B POP A POP B

2、分别写出一条能完成下述操作的指令:

(1)将寄存器BX的内容送入堆栈 (2)将数据2送入字单元DS:[SI]中 (3)用逻辑与指令将al的第六位设为0 (4)AX的内容加1,要求不影响CF (5)子程序返回调用程序 (6) 将AX中划‘X’的位清0,其余位不变:____________________;

150XX

(7) 将AX的内容算术左移1位:____________________。

3、指出下列指令中目的操作数与源操作数的寻址方式。(4分) (1) MOV BX, AX (5) MOV BX, [1234H] (2) SUB AH, 4CH (6) ADD [2000H], DX (3) XCHG 5[BP][DI], BX (7) AND BYTE PTR [BX], 0FH (4) OR [BX][DI], AH (8) SBB AX, ASC [BX] 题号 目的操作数 源操作数 (1) (2) (3) (4) (5) (6) (7) (8) 4、写出下列传送指令的源操作数的寻址方式(VAR 是变量) 1) MOV AX,1200 2) MOV AX,VAR[BX][DI] 3) MOV CX,VAR[BX] 4) MOV DI,[BX+100] 5) MOV AX,[1100H] 6) MOV AX,[BX] 7) MOV AX,DS:[BP]

5、下述程序段执行后SI=_______________,DI=________________;设程序 段执行前SP=1000H,执行后SP=____________________。

MOV SI,2A1DH MOV BX,3456H PUSH SI PUSH DI SUB SI,DI POP DI POP SI

6、下述程序段执行后AX=_______________,BX=________________;设程序 段执行前SP=1000H,执行后SP=____________________。

MOV AX,1234H MOV BX,5678H PUSH AX PUSH BX

7、下列语句在存贮器中分别为变量分配多少字节? VR1 DB ? ; VR2 DW 4 DUP(?),2 ; VR3 DD 1234H ;

8、设(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=1234H, (20102H) =5678H, (21200H)=2A4CH, (21202H)=B765H,下列指令单独完成后AX寄存器的值是多少。

1)MOV AX,1200H ____________ 2)MOV AX,BX ____________ 3)MOV AX,[1200H] ____________

4)MOV AX,[BX] ____________ 5)MOV AX,1100H[BX] ____________ 6)MOV AX,[BX][SI] ____________ 7)MOV AX,1100H[BX]SI] ____________

9、下列指令段经汇编后,DATA所代表的偏移地址为___。 ORG 1000H STROE DB 12 DUP(?)

DATA DB 05H,06H,07H,08H

A. 100CH B. 1001H C. 1012H D. 100BH

二、选择题

1.设(BX)=0400H ,(SI)=003CH ,(DS)=2000H ,(2043CH)=0079H ,执行

LEA BX , [BX + SI] 后,(BX)= _____________ 。

A. 0040H B. 0079H C. 043CH D. 2043CH 2.LOOP指令中循环计数器一定在_____________寄存器中。 A. AX B. CX C. BX D. DX

3.在串操作指令前使用重复前缀指令REPNE,终止串重复操作的条件是

__________。

A. CX=0且ZF=0 B. CX=0且ZF=1 C. CX=0或ZF=0 D. CX=0或ZF=1 4.执行下列指令后,正确的结果是__________。

MOV AL,100

MOV BL,-2

A. AL=100H,BL=02H C. AL=64H,BL=82H

B. AL=64H,BL=0FEH D. AL=100H,BL=0FEH

5.已知(BX)=0010H,(DS)=2000H,(20010H)=0020H,(20012H)=1000H,在执行指令JMP DWORD PTR [BX]后,(IP)=__________。 A. 0010H C. 0020H

B. 2000H D. 1000H

6.设(BX)=1111H,下列__________指令执行后,BX的值变为0888H。 A. SHL BX,1 B. AND BX,FFF0H C. OR BX,1FFFH D. SHR BX.,1

7.指令MOV AX, [3070H]中源操作数的寻址方式为__________。 A. 寄存器间接寻址 B. 立即寻址 C. 直接寻址 D. 变址寻址

8.设(BP)=0400H ,(DS)=2000H ,(SS)=2001H ,(20400H)=9A3EH,(20410H)

=3512H,执行MOV BX,[BP] 后,(BX)= _____________ 。

A. 0400H B. 0410H C. 9A3EH D. 3512H 9.在串操作指令前使用重复前缀指令REPE,终止串重复操作的条件是

__________。

A. CX=0且ZF=0 B. CX=0且ZF=1 C. CX=0或ZF=0 D. CX=0或ZF=1 10.设(IP)=3D8FH,(CS)=4050H,(SP)=017CH,[SP]=1234H,当执行段内过程

返回指令RET后,CS:IP的值为__________。

A. 4050H:3D40H B. 1234H:3D8FH C. 4050H:1234H D. 1234H:017CH 11.设(BX)=1111H,下列__________指令执行后,BX的值变为1110H。 A. SHL BX,1 B. AND BX,FFF0H C. OR BX,1FFFH D. SHR BX.,1 12、在下列语句中,AGAIN称为_____________。

AGAIN: INC SI A. 符号 C. 标号 A. 程序结束 C. 段定义结束

B. 助记符 D. 变量

B. 过程定义结束 D. 过程运行结束

13、伪指令END告诉汇编程序__________。

14、能判断累加器内容是否为全零的下面4种方法中,正确的有______种。 SUB AX,0 XOR AX,0 JZ L1 JZ L1

OR AX,AX TEST AX,0FFFFH JZ L1 JZ L1

A. 1 B. 2 C. 3 D. 4

15、设(20010H)=3FH,(20011H)=B2H,执行下列指令段后,BX=______。 MOV AX,2000H MOV DS,AX MOV BX,[0010H]

A. B2B2H B. B23FH C. 3F3FH D. 3FB2H

16、设SP=2500H,RAM 2500H ─ 2505H内分别存放10H,20H,30H,40H, 50H,60H六个数,执行MOV SP,2502H,POP BX两条指令后___。 A. SP=2502H BX=1020H B. SP=2504H BX=4030H C. SP=2504H BX=3040H D. SP=2502H BX=2010H 17、下列指令中不影响堆栈内容的是___。

A. PUSH B. RET C. JMP D. CALL 18、 下列指令段经汇编后,(CX)=___。 ARRAY DW 12 DUP(?) MOV CX,SIZE ARRAY

A. 1 B. 12 C. 24 D. 0 19、下列指令中允许寻址范围最大的是___。 A. JNZ NEXT B. LOOP NEXT

C. JMP SHORT PTR NEXT D. CALL NEAR PTR PROC_NAME 20、下列指令中能完成测试AL中最高位是否为1的指令数目是___。 CMP AL,80H TEST AL,80H RCL AL,1 ROR AL,1 A. 1 B. 2 C. 3 D. 4

三、简答题

1、设DS=3000H,ES=3100H,SS=1500H,SI=00B0H,BX=0200H,BP=0010H,数据变量VAL的偏移地址为0030H,请指出下列指令的源操作数字段的寻址

方式,如果源操作数为存储器寻址方式的一种,写出其物理地址值是什么?(本题10分,每小题2分)

(1)MOV AX,[BX][SI]

(2)MOV AX,[100]

(3)MOV AX,VAL[BX]

(4)MOV AX,[BP] (5)MOV AX,ES:[BX]

2、设堆栈指针SP的初值为1008H,AX=4000H,BX=5000H,试问: (1)执行指令PUSH AX后SP=? (2)执行完PUSH AX再执行PUSH BX 及POP AX后SP=?,AX=?,BX=?(5分)

3、下列指令是否正确,如不正确请指出原因,并改正。(5分) (1) MOV AL,BX

(2) MOV AL,CL

(3) MOV 3,AL

(4) MOV [BX],[SI]

(5) POP CS

4、指出下列指令是否正确,若不正确请说明原因。(4分) (1) MOV BX, AL (2) MOV [BX], [2000H] (3) DIV [SI][DI] (4) SHL AX, 5H (5) PUSH DL (6) MOV DS, DSEG (7) MOV SP, AL (8 MOV SS, 2400H (9) MUL AL,BL

(10) MOV BYTE PTR[DI], 2000H (11) MOV CS, CX (12) DEC [BX]

(13) ADC [1000H], 40H (14) CMP 16, AX (15) OUT 258H, AX

(16) MOV WORD-OP[BX+4×3] [SI], SP

5、假设(AX)=5E7AH, VER为字变量,(BX)=1234H,读程序段,写出每条指令执行后各寄存器的值。(5分)

MOV AX, 5E7AH ;(AX)= ______

MOV WORD PTR [VER], 00FEH ;VER所指的字单元内容为______ MOV BX, 0FF0H ;(BX)= ______ NOT BX ;(BX)= ______ AND AX, VER ;(AX)= ______ MOV CL, 4 ;(CL)= ______

SHR AX, CL ;(AX)= ______,(CL)= ______ XOR AX, BX ;(AX)= ______,(BX)= ______ OR AX, VER ;(AX)= ______ TEST AX,1234H ;(AX)= ______

6、下列程序段实现传送200个字节的数据的功能。程序如下,写出该程序段中每条指令的注释(4分)

LEA SI, BUFFER1 ; LEA DI, BUFFER2 ; MOV CX,200 ; CLD ; REP MOVSB ; HLT ;

7、阅读下段程序,给出划线语句的注释,并说明程序完成什么功能?(5分) DATA SEGMENT

BUFFER1 DB 200 DUP(1) BUFFER2 DB 200 DUP(?) DATA ENDS …….

MOV AX,2000H MOV DS,AX MOV ES,AX

MOV SI , OFFSET BUFFER1 ; MOV DI, OFFSET BUFFER2

MOV CX,LENGTH BUFFER1 ;

STD ; REP MOVSB ;

该程序完成的功能:

8、假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,

(BP)=0010H,数据段中变量名VAL的偏移地址值为0050H,试回答出下列源操作数的寻址方式是什么?如果源操作数为存储器寻址方式的一种,写出其物理地址值是什么?(20分,每小题2分)

①) MOV AX,0ABH

②) MOV AX,BX

③) MOV AX,[100H]

④) MOV AX,[BX]

⑤) MOV AX,ES:[BX]

⑥) MOV AX,[BP]

⑦) MOV AX,[BP+10]

⑧) MOV AX,VAL[BX]

⑨) MOV AX,[BX][SI]

⑩) MOV AX,VAL[BX][SI]

9、设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶地址为多少?执行PUSH BX后,栈顶地址和栈顶两个字节的内容分别是多少? 10、试用3种指令序列实现字变量A、B的内容交换。 11、写出完成下列要求的变量定义语句。

1)为某个缓冲区BUFF预留240各字节的存储空间

2)将字符串’BYTE’、’WORD’存放于某数据区

3) 10字数组ARRAY的前五个元素为1,2,3,4,5

12、画图说明下列语句所分配的存储空间及初始化的数据值。 VAR1 DB ‘HELLO’ VAR2 DW 1A2BH,2 DUP(0,?) 13、编写一个子程序,子程序的说明信息如下 子程序名:FUN 功能:求 x×20

入口参数:AX=x,x是一个16位无符号数 出口参数: 积存放于寄存器SI和DI。 14、已知有如下段定义:

DATA SEGMENT 地址 内容 BUF1 DW 1234H 2000:0000 BUF2 EQU 3

BUF3 DB ‘31’,2DUP(BUF2,10) BUF4 DW BUF3-BUF1

DATA ENDS

设定位后BUF1的地址为 2000H:0000H (1) 在右图中写出该段占用内存的内容

及其对应的地址。

(2) 填空:

BUF2= TYPE BUF4= LENGTH BUF1= SEG BUF3= OFFSET BUF3=

15、编写程序段,用系统功能调用的方法接收键盘一个按键并将其在显示器显示

输出。

16、画图说明下列语句所分配的存储空间及初始化的数据值。 VAR1 DB VAR2 DW

‘abc’,2 DUP(0,?) 1,2 DUP(0,?)

17、下面程序段完成功能:从键盘输入一个字符,然后输出在屏幕上。读程序段,

完成程序。

MOV AH,

INT 21H MOV MOV AH,2

18、程序中的数据定义如下:

LNAME DB 49H, 42H, 4DH, 2DH

ADDRESS DB 2 DUP(?) ENTRY DB 3

LIST DB 11, 7, 8, 3, 2

(1)假设LNAME相对于某数据段地址偏移为0,试画出内存分配图; (2)用一条MOV指令将LNAME的偏移地址放入AX; (3)用一条指令将LIST的头两个字节的内容存入SI;

(4)执行下列指令后,AX寄存器中的内容是什么? LEA BX, LIST ADD BX, ENTRY

MOV AX, WORD PRT[BX]

19、 根据下列要求编写一个汇编语言程序:: (1)代码段的段名为COD_SG (2)数据段的段名为DAT_SG (3)堆栈段的段名为STK_SG

(4)变量HIGH_DAT所包含的数据为95

(5)将变量HIGH_DAT装入寄存器AH,BH和DL (6)程序运行的入口地址为START 20、指出下列程序中的错误:

STAKSG SEGMENT DB 100 DUP(?) STA_SG ENDS DTSEG SEGMENT DATA1 DB ? DTSEG END

CDSEG SEGMENT MAIN PROC FAR START: MOV DS,DATSEG MOV AL,34H ADD AL,4FH MOV DATA,AL START ENDP CDSEG ENDS END

21、将下列文件类型填入空格:

(1) .obj (2) .exe (3) .crf (4) .asm (5) .lst (6) .map 编辑程序输出的文件有_____________________________________; 汇编程序输出的文件有_____________________________________; 连接程序输出的文件有_____________________________________。

22、已知8086-CPU寄存器的内容如下:

AX=0123H,BX=1234H,CX=4567H,DX=9ABCH DS=2300H, SS=3000H,ES=2800H, DI=1F00H

SP=1000H,BP=0010H,SI=0000H,

写出下列过程每条指令执行后,有关寄存器和内存单元的内容。(5分) (注:无变化的不要标出,内存单元地址用逻辑地址表示)。

LLL PROC FAR

MOV WORD PTR [BP],23H

PUSH CX

MOV [DI+2800H],DX

PUSH BX

RET LLL ENDP

23、下列语句在存储器中分别为变量分配多少字节?

VR1 VR2 CONT VR3 VR4 VR5

DW 9

DW 4 DUP(?) EQU 10

DD CONT DUP(?)

DB 2 DUP(?,CONT DUP(0)) DB ‘HOW ARE YOU?’

24、试定义一个完整的数据段,首先将10个压缩的BCD码29存放在ARRAY变量字节单元,紧接着把-28,6,45,39,3存放在ALPHA数组变量的字单元中,最后从字节变量BUFFER单元开始预留100个空单元备用。 25、按下面的要求写出程序的框架。

(1)数据段的位置从0E000H开始,数据段中定义一个100字节的数组; (2)代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值; (3)程序结束

26、下面的程序段有错吗?若有,请指出错误。 CRAY

PROC

AX AX,BX

PUSH ADD RET

ENDP CRAY

27、写出完成下述功能的程序段或指令 1) 写出几条使AX内容为0的指令 2) 使BL寄存器中的高4位和低4位互换 3) 屏蔽CX寄存器的b11,b7和b3位

4) 测试DX中的b0和b8位是否都为1,若不为1,跳转至L1 28、在下列程序的括号中分别填入如下指令: 1)LOOP L20 2)LOOPE L20 3)LOOPNE L20

试说明在三种情况下,当程序段完成后,AX,BX,CX,DX四个寄存器的内容分别是什么:

MOV AX,01 MOV BX,02

MOV DX,03 MOV CX,04 L20: INC AX ADD BX,AX SHR DX,1 ( )

29、编写一程序段,比较两个5字节的字符串OLDS和NEWS,如果不同则转到NEW_LESS执行,否则顺序执行。

30、用其他指令完成如下指令同样的功能。 1)REP MOVSW 2)REP LODSB 3)REPZ

CMPSB 4)REPNE

SCASB

三、程序分析题

1、下面的程序求数据段中从BUFF开始的10个字数据的最大值。填充程序中的空白,除非必要,不要写标号。 DATA COUNT

SEGMENT

DW 10

DW -1,0,2,5,4,12,34,90,7,8 DW ? ENDS SEGMENT

BUFF MAX

DATA CODE

ASSUME CS:CODE,DS:DATA

START: MOV DS,AX

MOV

CX,COUNT-1

MOV ADD CMP

DX, [SI] SI,2 [SI],DX

L0:

JC L1

DX, [SI]

MOV

L1:

L0 MAX, DX AH,4CH 21H

JNZ

MOV MOV INT

END START

2、下面的子程序NUM统计一个8位二进制数中的为1的位的个数。调用该子程序时,8位二进制数存放在AL中。子程序返回时,求出的个数存放在BL中,要求AL的内容保持不变。填充程序中的空白,除非必要,不要写标号。

NUM

PROC

MOV BL,0

CL,8

MOV

A1: JNC A2

A2: DEC CL JNZ A1 POP AX RET

4、下面的程序求数据段中从BUFF开始的10个字类型数的累加和。填充程序中的空白,除非必要,不要写标号。 DSEG SEGMENT

BUFF DW 2,3,4,10,9,89,34,20,9,7,100 RESULT DD ? DSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG START: MOV DS,AX

MOV AX,0 MOV DX,0

MOV CX,10

CLC

AGAIN:

ADC DX,0

ADD SI,2

JZ AGAIN

MOV RESULT,AX MOV AH,4CH INT 21H

CSEG ENDS

5、下面的程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符

结束),并将其中的大写字母转化成小写字母,然后将该字符串输出。填充程序中的空白,除非必要,不要写标号。

BUF DB 80,?80 DUP(?) DATA ENDS

CODE SEGMENT

ASSUME CD:CODE,DS:DATA START: MOV DS,AX

;接收用户键入的字符串 __________________ MOV CL,BUF+1 MOV CH,0

LEA SI,BUF+2

L1: MOV AL,[SI]

CMP AL,’A’

JB NEXT

CMP AL,’Z’

JA NEXT

NEXT: INC SI

MOV AH,09H

MOV DX,OFFSET BUF INT 21H

INT 21H CODE ENDS

6、下面的程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并对其中数字计数,然后将结果存入digit存储单元中。填充程序中的空白,除非必要,不要写标号。 DATA SEGMENT

BUF DB 80,?,80 DUP(?) DIGIT DB 0

CODE SEGMENT

ASSUME CD:CODE,DS:DATA START: MOV DS,AX

;接收用户键入的字符串) __________________

;取实际输入字符个数

_________________ LEA SI,BUF+2 L1: MOV AL,[SI]

CMP AL,’0’

JB NEXT

CMP AL,’9’

JA NEXT

INC BYTE PTR [DIGIT]

NEXT: INC SI

MOV AH,4CH

INT 21H CODE ENDS

7、下面的程序通过调用子程序HASCII,实现把XX存储单元中的一位十六进制数转换为对应ASCII码,并存储在ASCII单元中 。填充程序中的空白,除非必要,不要写标号。 其中:子程序名:HASCII

功能:把一位十六进制数转换为对应ASCII码 入口参数:AL=待转换的十六进制数 出口参数:AL

算法: X+30H(0<=X <=9) Y= X+37H(0AH<=X<=0FH ) DATA XX

SEGMENT

DB 4

DB ?

ASCII

DATA ENDS CODE

SEGMENT

START:

MOV AX,DATA

MOV MOV

DS,AX AL,XX

CALL HASCII

MOV AH,4CH

INT 21H

)

AND CMP

AL,0FH AL,9

JG LAB1 ADD

AL,30H

ADD

AL,37H

LAB1: LAB2:

HASCII ENDP CODE

ENDS END

START

8、用串操作指令将100H个字符从2100H处搬到1000H处,并且从中检索与AL中所存字符相同的存储单元,并将该单元的内容替换成空格,本程序只替换检索到的第一个相同的单元。请在下列空格中填入合适的指令,使程序段完成上述功能。

MOV SI,2100H (1) MOV CX,100H CLD

(2) MOV DI,1000H MOV CX,100H (3) JNZ K1 (4) MOV [DI],20H K1: ┇

四、编程题

1、编写子程序NUM统计寄存器AL数中的为1的位的个数,并将统计结果存放在BL中。

2、编写一个程序,判断AX中的数是正数、负数还是零。若AX是正数,将-1存入CL;

若AX=0,将0存入CL否则若AX是负数,将1存入CL。要求画出流程图并写出源程序。

3、数据段从1000H 开始,有10个字节的无符号数,编写一个程序求这10个数

的和(用8位运算指令,和小于2个字节表示的最大范围),把和放在100AH及100BH单元中。

4、编程将CX、DX作为双字联合右移四位(设CX为高16位),最高4位送入全1。

5、从ARRAY开始的单元中存有10个16位无符号数,试编一完整程序找出其中最小数并存入MIN单元。 6、利用DOS系统功能调用,将键盘输入的小写字母转换成大写字母输出显示,直到输入“$”字符时停止输出。

7、要求编写程序比较两个最大长度为100个字符的字符串ALFA1和ALFA2是否相等,若相等则输出显示“All Right!”,否则输出显示“Error!”。

8、有一个最大长度为80个字符的字符串STRING,试编写程序找出第一个空格的位置(用00H~4FH表示),并存入CL中。若该串无空格,则将0FFH存入CL中。 9、从键盘输入一系列字符(以回车符结束),并按字母、数字及其他字符分类统计计数存入N1、N2、N3三个单元。

10、编写一个子程序SKIPLINES,完成输出空行的功能,空行的行数存放在AX中。

;功能:输出空行

;入口参数:AX:空行的行数 ;出口参数:无

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务