汇编——模拟试卷五

一、单项选择题(每小题1 分,共20 分)

1. 指令ADD AX,[3500H]中,源操作数使用的寻址方式是(A)。

A. 直接寻址     B. 寄存器寻址

C. 寄存器相当寻址    D. 立即寻址

2. 条件转移指令JZ 产生转移的测试条件是( )。

A. ZF=0       B. ZF=1

C. ZF=1 或CF=1   D. ZF=0 或CF=1

1 JZ就是JE
View Code

3. 在字符串操作指令中,源串操作数放在的寄存器是( )。

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

1 字符串操作指令中,源串操作数在DS,目的操作数可以是DS 或者ES。
View Code

4. 使用DOS 系统功能调用终止当前程序并返回调用程序,应选用的指令是(C)。

A. MOV AH,01H    B. MOV AH,00H

 INT 21H          INT 21H

C. MOV AH,4CH   D. RET

 INT 21H       INT 21H

1 assume cs:code
2 code segment
3   start:
4         ...
5         mov ax,4c00h
6         int 21h
7 code ends
8 end start
View Code

5. 下列指令中,有语法错误的指令是( )。

A. MOV CS, AX     B. MOV BL,[BX]

C. MOV SS, [BP+DI]   D. MOV ES, AX

1 不能直接给CS代码段寄存器赋值,要用jmp
2 
3 为其他段寄存器赋值的方法:mov ss,[bx,si,di,bp]    mov ss,ax
View Code

6. 数据定义如下:

DA_BYTE DB 0ABH,?

DA_WORD DW ?,?

下面语句中错误的语句是(A)。

A. ADD DA_BYTE+2,AX

B. ADD BYTE PTR DA_WORD+1,AL

C. ADD WORD PTR DA1+1,AX

D. ADR1 DW DA_BYTE1

1 A. ADD DA_BYTE+2,AX            ; 字节型数据,AX是16位寄存器
2 
3 B. ADD BYTE PTR DA_WORD+1,AL    ; 已经声明了是字节型数据,可以和AL相加
4 
5 C. ADD WORD PTR DA1+1,AX         ; 字型数据
6 
7 D. ADR1 DW DA_BYTE1                ; 看不懂
View Code

7. 将CX 寄存器清零,下面指令中错误的指令是(C)。

A. SUB CX,CX     B. XOR CX,CX

C. XOR CX,00H     D. AND CX,00H

1 XOR 指令:两个寄存器的值相等,则将第一个寄存器清零
View Code

8. 已知(AX)=1111H,执行下述三条指令后,(AX)的值是(D)。

MOV BX,AX

NEG BX

ADD AX,BX

A. 1111     B. 2222       C. 1110CH       D. 0000H

1 MOV BX,AX      ; AX = 1111H,BX = 1111H
2 
3 NEG BX          ; 求补 BX = 0EEEFH
4 
5 ADD AX,BX      ; AX = AX + BX = 0000H
View Code

9. DA DW ‘AB’在存储器中的存储顺序是( )。

A. 41H,42H      B. 42H,41H

C. 0041H,0042H   D. 0042H,0041H

1 因为是字型数据,一个英文字符占一个字节,两个整好是一个字
2 在前面的在高位字节,后面的在低位字节
View Code

10. 假设数据段中数据定义如下:

DA_BYTE DB 56

DA_WORD DW 10 DUP(?)

实现将DA_BYTE 单元的内容与DA_WORD 开始的第三个字节单元内容相减的指令是( )。

A. SUB DA_BYTE,DA_WORD BYTE PTR DA_WORD+3

B. MOV AL,DA_BYTE

    SUB AL,BYTE PTR DA_WORD+2

C. MOV AL,DA_BYTE

    SUB AL,DA_WORD+2

D. MOV AL,DA_BYTE

    SUB AL,DA_WORD+3

1 DA_WORD和DA_BYTE,代表当前的第一个字节/字
View Code

11.   LOP: MOV DL,[SI]

      MOV [DI],DL

      INC SI

      INC DI

      LOOP LOP

与上述程序段完成同样功能的一条指令是(B)。

A. REP LODSB     B. REP MOVSB

C. REP STOSB     D. REP SCASB

12. 下面数据定义伪指令中错误的语句是( )。

A. DB ‘ABCD’     B. DW 0ABCDH

C. DW ‘ABCD’      D. DW ‘AB’

1 DW 后面的字符串,最多,只能是两个字符。
2 两个以上字符,只能用 DB。
View Code

13.  DAR1 DB 10H,20H,30H  

       DB $ -DAR1

  DAR2 DB 40H,50H,60H

     …

     MOV SI,OFFSET DAR1

     MOV CL,4[SI]

     MOV CH,LENGTH DAR2

上述指令序列运行后,CX 的内容是(D)。

A. 0103H     B. 0304H

C. 0104H     D. 0140H

1 SI = 0
2 
3 CL = [4] =40H
4 
5 CH = 1
View Code

14.  MOV AL,96H

  MOV BL,12H

  MUL BL

执行上述指令后,结果是(B)。

A. AX=1152,OF=1,CF=1        B. AX=0A8CH,OF=1,CF=1

C. AX=0A82H,OF=0,CF=1       D. AX=F88CH,OF=1,CF=1

1 相乘的两个数:要么都是8位,要么都是16位。
2 
3   8 位: AL中和 8位寄存器或内存字节单元中;结果保存在AX中。
4 
5 16 位: AX中和 16 位寄存器或内存字单元中;结果保存在DX(高位)和AX(低位)中。
View Code

15.  MOV BL,67

  ADD BL,0BDH

上述指令执行后,相关标志的值为(A)。

A. CF=1,SF=0,ZF=1,OF=0     B. CF=0,SF=1,ZF=0,OF=1

C. CF=1,SF=1,ZF=0,OF=0     D. CF=0,SF=0,ZF=1,OF=0

1 MOV BL,67        ; 43H
2 
3 ADD BL,0BDH    ; BL=BL+BD=00H  ==> CF=1,SF=0,OF=0,ZF=1
View Code

16. 下述指令中对标志寄存器PSW 中标志位不产生影响的指令是(D)。

A. INC SI      B. TEST AL,0FH

C. SAR BL,1   D. JMP LOP

18. 数据定义如下:

X1 DB 10H,50,1    ; 0~2

X2 DW 10H,20,3      ; 3~8

X3 DD?          ;9~12

COUNT EQU X3-X1

变量COUNT 的值是( )。

A. 6     B. 8    C. 9     D. 10

1 X1,X2,X3分别代表着每一个类型的第一个数据的内存地址
2 
3 X1=0
4 
5 X2=3
6 
7 X3=9
8 
9 COUNT=X3-X1=9
View Code

19. 下列指令中,语法正确的指令是(C)。

A. ADD [BX],5

B. DEC [BX]

C. MOV BYTE PTR[BX],8

D. MOV AL,BX

1 [BX]这种的要声明byte ptr/word ptr
View Code

20. 已定义变量ADR DW 200 DUP(0),则指令MOV CX,LENGTH ADR 的等效指令是(B)。

A. MOV CX,100     B. MOV CX,200

C. MOV CX,400     D. MOV CX,100 DUP(0) B

二、填空题(每空1 分,共5 分)

名词解释:请将1~3 小题的叙述与下面的词语联系起来,在括号内填入对应的A、B 或C。

1. 逻辑段的起始地址是(C)。

2. 相对于段起始地址的偏移量是(B)。

3. CPU 发出的访问存储器的地址是(A)。

词语:A. 物理地址 B. 偏移地址 C. 段地址

4. 若(SP)=0FFFEH,则指令POP AX 执行后,(SP)=   0000H   

5. 回送变量或标号的偏移地址值,应使用   offset   伪指令。

三、简答题(每小题2 分,共6 分)

1. 有符号定义语句如下:

DAW DW ?        0~1

NAME DB 16 DUP(?)  2~17

COUNT DD ?      18~21

LENTH EQU $ -DAW  22

试问LENTH 的值为多少?    

$=当前偏移地址=22,所以$-DAW=19

2. 根据要求写出汇编语言的指令。

(1)用寄存器BX 和位移量0ABH 的寄存器相对寻址方式,把存储器中的一个字与CX 寄存器相加,并把结果送回存储器单元中。

ADD [BX+0ABH],CX

(2)把数0F9H 与(AL)相加,结果送回AL 中。

ADD AL,0F9H

3. 请指出下述两条伪指令语句的区别:

COUNT1 EQU 16H

COUNT2=16H

COUNT1 不允许重复赋值
COUNT2 允许

四、程序分析题(每小题5 分,共35 分)

1. 有如下程序段:

 1 DAT1 DB 30 DUP(?)
 2 
 3 DAT2 DB 10 DUP(?)
 4 
 5  6         MOV CX,10                ; 循环十次,将DTA1的后10个字节型数据,复制到DAT2中
 7 
 8         MOV BX,20
 9 
10         MOV SI,0        
11 
12         MOV DI,0
13 
14  NEXT: MOV AL,DAT1[BX][SI]    ; (AL)=DAT1[20]
15 
16         MOV DAT2[DI],AL        ; DAT2[0]=(AL)
17 
18         INC SI                    
19 
20         INC DI
21 
22         LOOP NEXT

试问:上述程序段完成什么功能?

2. 有如下代码段:

DATA SEGMENT

   ORG 0100H

DAR DW 0FF00H

(1)MOV AX,DAR

(2)MOV AX,OFFSET DAR

试问:(1)上述两条指令有什么区别?

1)将0100H位置的值赋给AX寄存器
(2)将0100H位置的偏移量赋给AX寄存器

(2)指令分别执行后,AX 寄存器的内容各是什么?

第1条指令:(AX)=0FF00H

第2条指令:(AX)=0100H

3. 若(AX)=0A33AH,(DX)=0F0FH 

 1 ; (AX)=1010 0011 0011 1010  (DX)=0000 1111 0000 1111
 2 ; (AH)=1010 0011 (DL)=0000 1111 
 3 
 4 AND AH,DL      ; (AH)=0000 0011=03H 
 5               
 6 XOR AL,DH      ; (DH)=0000 1111 (AL)=0011 1010 ==> AL=0011 0101
 7 
 8 NEG AH          ; 求补 ==> FDH
 9 
10 NOT AL          ; 取反 ==> CAH
11 
12 so (AX) = 0FDCAH

上述程序段执行后,AX 寄存器中的内容是多少?

4. 设(AX)=0FC77H,(CX)=504H,(CF)= 1

SAR AX,CL

XCHG CH,CL

SHL AX,CL

1 SAR AX,CL        ; 算数右移4位 ==> 1111 1111 1100 0111B
2 
3 XCHG CH,CL        ; 交换CH和CL的位置
4 
5 SHL AX,CL        ;逻辑左移5位 ==> 1111 1000 1110 0000 =F8E0

上述程序段执行后,(AX)=   F8E0   ,(CF)=     1     

5. 有如下程序段:因为是字型数据,所以它增加偏移量是一次+2,才到下一个数据

 1 DATA SEGMENT
 2 
 3 DA1 DW ?
 4 
 5 DA2 DW 24
 6 
 7 DA3 DW 3406050
 8 
 9 DATA ENDS
10 
11 12 
13 MOV BX,OFFSET DA3
14 
15 MOV AX,[BX]    ; AX=340
16 
17 MOV DA2,AX        ; DA2 DW 340
18 
19 MOV AX,2[BX]    ; AX=60
20 
21 ADD AX,DA2        ; AX=340+60=400
22 
23 MOV DA1,AX        ; ?=400

上述程序段执行后,DA1 单元的内容是什么?

6. 已知数据定义如下:

 1 DA1 DW 1384H
 2 
 3     DW 2578H
 4 
 5 DA2 DW 9087H
 6 
 7     DW 3456H
 8 
 9 10 
11 MOV DX,DAl+2    ; (DX)=2578H,被除数高位
12 
13 MOV AX,DA1        ; (AX)=1384H,被除数低位
14 
15 DIV DA2            ; 将双字数据DA1 除以字数据DA2

请问上述程序段完成什么功能?

7. 有如下程序段:

 1 MOV AX,2        ; (AX=02H)
 2 
 3 MOV BX,80H        ; (BX=80H)
 4 
 5 MOV CL,03H        ; (CL=03H)
 6 
 7 SHL AX,1        ; 逻辑左移一位 ==> (AX)=4H
 8 
 9 SHR BX,1        ; 逻辑右移一位 ==> (BX)=40H
10 
11 ROL AX,CL        ; 循环左移3位(循环左移,将移出的补到低位)(AX)=0020H=0000 0000 0010 0000B
12 
13 ROR BX,CL        ; 循环右移3位 (BX)=0008H=0000 0000 0000 1000B
14 
15 XOR AX,BX        ; 亦或操作:同为0,异为1 (AX)=0000 0000 0010 1000B=0028H

问:上述程序段执行后,(AX)=     0028H   

五、程序填空题(每小题6 分,共12 分)

1. 下列程序段实现1+2+3+…+100 的累加和。试在空白处填上适当的指令(每空白处只填一条指令)。

 1         __mov cx,99__
 2 
 3         MOV AX,1
 4 
 5         MOV BX,2
 6 
 7   LOP: ADD AX,BX
 8 
 9         INC BX
10 
11         __loop lop__

2. 以ARRAY 为起始的单元数据区中存放N 个带符号的数字,分别统计其中正数和负数的个数,试在空白处填上适当的指令(每空白处只填一条指令)。

 1 DATA SEGMENT
 2 
 3   ARRAY DB 12H,94H,86H,78H,90H        ; 0~4
 4 
 5         DB 54H,0ABH,81H,34H,61H        ; 5~9
 6 
 7    CUNT EQU $ - ARRAY                    ; 10 cunt=10-0=10
 8 
 9     DA1 DB    ?                            ; 11
10 
11     DA2 DB  ?                            ; 12
12 
13 DATA ENDS
14 
15 16         MOV BX,OFFSET ARRAY    ; (BX)=0
17 
18         MOV CX,CUNT            ; (CX)=10
19 
20  LOP1: MOV AL,[BX]            ; (AL)=[0]=12H
21 
22         __CMP AL,0__
23 
24         JGE LOP2                ; jge 大于等于,jle小于等于
25 
26         __INC DL__
27 
28         JMP LOP3
29         
30  LOP2:  JZ LOP3
31         INC DH
32 
33  LOP3: DEC CX
34 
35         __JNZ LOP1__                ; 不等于0的时候转移
36 
37         MOV DA1,DL
38 
39         MOV DA2,DH
40 
41         HLT

六、编制程序题(本大题共3 小题,共22 分)

1. 已知存储器中有一个首地址为ARRAY 的200 个字数组,现在要求把数组中的每个数加1(不考虑溢出),试编写完成此功能的程序段。(5 分)

1   MOV CX,200
2 
3 s:MOV BX,offset ARRAY
4   MOV AX,[BX]
5   INC AX
6   MOV [BX],AX
7   INC BX
8   INC BX
9   LOOP s

2. 编写程序段,将附加段中的一个字节变量COUNT 送给AL 寄存器。(5 分)

mov bx,offset count

mov al,es:[bx]

3. 以ARAAY 为起始地址的字节存储单元中存放有N 个有符号数据,请编写程序找出其中最大值和最小值分别送入BL 和AL 寄存器中。(12 分)

 1 ASSUME CS:CODE,DS: DATA
 2 DATA SEGMENT
 3     ARRAY DB 253398,-2…… ;N 个有符号数字
 4     COUT EQU $ -ARRAY
 5 DATA ENDS
 6 
 7 CODE SEGMENT
 8  START:MOV AX,DATA
 9         MOV DS,AX
10         
11         LEA SI,ARRAY    ; mov si,offset ARRAY
12         MOV CX,COUT    ; 循环次数
13         XOR AX,AX         ; mov ax,0
14         MOV BL,AL        ; bl=al=00H
15         
16  LOP1: CMP AL,[SI]
17         JGE LOP2        ; 大于等于跳到lop2
18         MOV AL,[SI]    ; 否则将al修改为当前[si]
19         JMP LOP3
20         
21  LOP2: CMP BL,[SI]    ; 小于等于跳到lop3
22         JLE LOP3
23         MOV BL,[SI]    ; 否则将bl修改为当前[si]
24         
25  LOP3: INC SI
26         LOOP LOP1
27         
28         MOV AH,4CH
29         INT 21H
30         CODE ENDS
31         END START
min=0,max=0

for i in array:
	if i > max:
		max = i
	elif i < min:
		min = i

 

posted @ 2017-12-25 22:14  想54256  阅读(2103)  评论(0编辑  收藏  举报