四川大学期末考试试题(闭卷)
12134122005-2006学年第2学期)
课程号:      课序号:  课程名称: 汇编语言程序设计(B卷)任课教师:       
适用专业年级:计算机科学技术2004    学生人数:        印题份数:        学号:              姓名:           
一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.如果当前(SP)=0058H,执行POP  AX指令后,(SP)=(D        )
(A)60H                (B)56H
(C)59H                (D)5AH
2.下面的数值表示中,和100相等的是哪一个(    D    )
(A)00000100B            (B)64
(C)100H                (D)64H
3.以下指令中,执行后要影响标志位的指令为(    B        )
(A)MOV  AL,BL        (B)SAHF
(C)NOT  CL            (D)PUSHF
4.在算术移位指令中,如果移位次数大于1,则移位次数应当预先存放在哪一个寄存器中(B      )
(A)DL        (B)CL      (C)DH        (D)AL
5.下列条件转移指令中,哪一个是针对带符号数比较的(    C        )
(A)JB          (B)JA      (C)JG            (D)JC
6.如果当前(AL)=0FFH,执行指令INC  AL之后,CF标志位的取值为(A        )
(A)与执行该指令之前的取值保持一致  (B)1
(C)0                              (D)2
7.LOOP指令所使用的计数器是哪一个寄存器(    A    )
(A)CX                (B)CL
(C)BX                (D)DX
8.如果当前(AL)=0C0H,执行CBW指令后AH寄存器的内容为(    B    )
(A)00H                        (B)0FFH
(C)与执行该指令前保持一致        (D)01H
9.如果(AL)=81H,执行ROL  AL,1指令后,OF标志位为(    B    )
(A)OF=0        (B)OF=1      (C)OF=2        (D)OF不确定
10.如果(AL)=0C4H,执行如下所示的程序片段后,正确的执行结果为(    C    )
MOV  BL,AL
SHL  AL,1
ADC  AL,BL
(A)(AL)=4CH        (B)(AL)=88H
(C)(AL)=4DH        (D)(AL)=0C4H
11.以下指令中,没有使用存储器寻址方式的是哪一个(    B    )
(A)SUB  AL,[SI]                (B)ADC  BH,28H
(C)XOR  TAB1[BX][DI],AX        (D)NOT    BYTE  PTR  100H[BX]
12.如果(SP)=56H,在一个NEAR类型的子程序内执行指令RET  6,执行完毕后
(SP)=(    C    )
(A)62H        (B)64H        (C)5CH            (D)5EH
13.如果数据段中一个内存单元对应的物理地址为17698H,(DS)=1700H,那么使用DS段寄存器指明该单元的段基值时,需要使用哪一个偏移量才能正确访问该单元(    C    )
(A)15F88H        (B)0688H      (C)0698H        (D)0088H
14.如果要读取60H号端口的内容,下面的指令哪一个能够实现该功能(        D
(A)IN  BL, 60H                    (B)MOV  AL,[60H]
(C)INT  60H                    (D)IN  AL,96
15.以下指令中,没有使用基址寻址的指令是哪一个(    B    )
(A)AND  CL,100H[BX]            (B)MOV  [BP],BX
(C)SBB  TAB1[BX],AH            (D)XOR  AX,200H[BP]
16.如果(AL)=11000100B执行如下程序片段后,正确的执行结果为(        B    )
SHL  AL,1
AND  AL,0FH
RCL  AL,1
(A)(AL)=00010000B,CF=1            (B)(AL)=00010000B,CF=0
(C)(AL)=00010001B,CF=0            (D)(AL)=00010001B,CF=1
17.如果(AL)=08H,(BL)=07H,执行如下程序片段后,正确的执行结果为以下哪一个(C    )
ADD  AL,BL
AAA
(A)(AL)=0FH,CF=0                (B)(AL)=0FH,CF=1
(C)(AL)=05H,CF=1                (D)(AL)=05H,CF=0
18.以下指令中,哪条指令访问了堆栈段?(    C      )
(A)AND  CL,[DI]                (B)MOV  [BX][SI],46H
(C)SBB  0020H [BP][DI],AX        (D)NEG    ES:[100H]
19.若当前(AL)=28H,执行指令OR  AL,80H后,SF标志位的取值为(  B        )
(A)0          (B)1        (C)2          (D)0A8H
20.如果(SP)=80H,执行指令CALL  FAR  PTR  PROCD1后,(SP)=(    D        )
(A)80H        (B)7EH      (C)84H            (D)7CH
二、多项选择题(本大题共5小题,每小题2分,共10分 )在每小题列出的五个备选项中有二个至五个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选、少选或未选均无分。
1.对于SAHF指令,以下哪些标志位是要被影响的(    ABCDE            )
(A)CF        (B)OF        (C)PF        (D)ZF        (E)SF
2.对于汇编语言中的子程序设计,下列描述正确的有哪些(    ABCDE        )
(A)子程序执行的最后一条指令一定是RET指令
(B)子程序可以通过堆栈取得入口参数,并且通常使用BP寄存器从堆栈中获取入口参数
(C)子程序可以通过寄存器取得入口参数
(D)子程序可以分为NEAR和FAR两种类型
(E)RET  N (N为整数)这种返回指令格式通常用于清除主程序通过堆栈传递的入口参数
3.下面对8086/8088汇编语言中堆栈的描述,正确的有哪些(        ACE    )
(A)当使用PUSH、POP指令对堆栈进行操作时,遵循后进先出的原则
(B)执行PUSH指令时,SP寄存器的内容会被自动加2
(C)CALL指令与RET指令在执行时会自动改变SP寄存器的内容
(D)PUSH、POP指令的操作数可以以字为单位,也可以以字节为单位
(E)执行POPF指令时,SP寄存器的内容会被自动加2
4.如果当前(AL)=03H,有如下程序片段:
SHL    AL,1
    MOV    BL,AL
    MOV    CL,2
    SHL    AL,CL
    ADD    AL,BL
执行该程序片段后,对执行结果的正确描述有哪些?(        ABCE    )
(A)(AL)=1EH    (B)(BL)=06H    (C)(CL)=02H   
(D)CF=1          (E)PF=1
5.如果在源程序中定义了一个变量VA1,下列指令中,哪些指令一定能够获取该变量的偏移量并保存到SI寄存器中(            CE    )
(A)MOV    SI,VA1                (B)LDS      SI,VA1          (C)LEA      SI,VA1
(D)LES    SI,VA1                (E)MOV  SI,OFFSET  VA1
三、判断分析题(本大题共5小题,每小题3分,共15分 )每小题列出的语句在语法上可能是正确的,也可能是错误的,请判断各小题所给语句在语法上是否正确,如果是错误的,则需要分析其错误原因。对于所给语句正确的小题,只要做出正确判断即给3分,如果做出错误判断则无分;对于所给语句错误的小题,做出正确判断给1分,做出正确的错误分析再给2分,如果做出错误判断则无分。
1.JB  BX
1. 错误,条件转移指令没有间接转移方式
2.MOV  IP,0890H
错误,不能使用MOV指令给IP寄存器传递数据
3.ADC  BYTE  PTR  [BX],BYTE  PTR  [SI]
错误,双操作数指令中只能有一个存储器操作数
4.SUB  [SI],64
错误,操作数的类型不明确
5.PUSH  AL
错误,PUSH指令只能操作字数据类型
四、名词解释题(本大题共3小题,每小题4分,共12分),解释每小题所给名词的含义,若解释正确则给分,若解释错误则无分,若解释不准确或不全面,则酌情扣分。
1.立即数寻址:  寻址方式的一种,由指令代码内部的立即数字段给出源操作数
2.补码:  一种带符号数的编码方式,正数的补码为真值本身,负数的补码为真值变反加1的结果
3.寄存器间接寻址:  存储器寻址方式的一种,由BXBPSIDI这四个寄存器其中之一给出偏移量
五、程序分析题(本大题共3小题,每小题7分,共21分 ),每小题给出了一个程序片段,这些程序片段在语法和逻辑上都是正确的,请按照各小题给出的分析要求,分析程序片段的执行结果或总结程序片段的功能,并在空白处填写分析结果,分析正确则按照每空后标注的分值给分,如果分析错误则该空不得分。
1.阅读下面的程序片段,并分析程序功能与指定寄存器的用途。(共7分)
DATA  SEGMENT
DAT1  DB  -53,63,-78,23,48,62,-37,80
LEN  EQU  $-DAT1
DATA  ENDS
……
CODE  SEGMENT
……
        MOV  BX,OFFSET  DAT1
        MOV  CX,LEN
        XOR  AL,AL
L1:    TEST  [BX],80H
指示汇编程序如何汇编的指令
        JZ      L2
        INC    AL
L2:    INC    BX
        LOOP    L1
……
CODE  ENDS
该程序片段的功能为  统计数组中负数的数量                  (3分)
AL寄存器的用途为      AL用作统计负数个数                (2分)
CX寄存器的用途为      CX用作循环计数器                (2分)
2.阅读下面的程序片段,并分析执行结果。(共7分)
MOV  AL,0B6H
MOV  CX,0402H
      XOR  BL,BL
L1:  ROL  AL,CL
      ADC  BL,0
      DEC  CH
      JNZ    L1
执行该程序片段后:
(AL)=        0B6H            (3分)
CF =            0          (2分)
ZF =            1          (2分)
3.阅读下面的程序片段,并分析执行结果(共7分)
MOV  AX,6560H
MOV  BX,4839H
PUSH  AX
SUB  AX,BX
POP    BX
NEG  BX
执行上面程序片段后,执行结果为:
(AX)=            1D27H                                                    (3分)
(BX)=              9AAoH                                                (2分)
  CF  =                      1                                          (2分)
六、程序设计题(本大题共2小题,第1小题10分,第2小题12分,共22分 ),每小题给出了一个程序设计要求,请按照要求写出源程序代码,如果源程序代码中出现语法错误或逻辑错误,则酌情扣分。
1.请设计一个宏指令,其功能如下:
(1)主程序进行宏调用时提供一个字符串在数据段中的起始偏移量、该字符串的长度、存放统计值的单元偏移量
(2)宏指令统计该字符串中字符‘A’的个数,统计结果返回给主程序
仅要求写出与宏指令相关的源程序代码,并用文字说明各形式参数的含义。(10分)
形式参数说明:STR1用于指示字符串的起始偏移量,LENGTH用于指出字符串长度,RES用于指示存放统计结果的偏移量                    ;形式参数说明 2
CHARNUM  MACRO  STR1, LENGTHRES        ;宏定义 2
            LEA  BX, STR1                    ;循环初始化  2
            MOV  CX, LENGTH
            MOV  RES0
LOP1:        CMP  [BX], ‘A’                        ;循环主体  4
            JNZ  L1
            INC  RES
L1:          LOOP  LOP1
ENDM
2.请设计一个完整程序,该程序的功能如下:
(1)从键盘接收一个字符串输入,把接收到的字符串存放于一个缓冲区中,最大允许输入10个字符,输入字符数不够10个时可以回车键结束字符串的输入。
(2)将该字符串中的字符‘H’全部替换为字符‘T’
(3)在新的一行上显示更改后的字符串
要求写出完整的源程序代码。(12分)
DATA  SEGMENT                    ;数据段及变量定义,2
MAXLEN  DB  20
ACTLEN  DB 
STR1      DB  21 DUP(?)
DATA  ENDS
CODE  SEGMENT                    ;代码段定义,1
ASSUME  CSCODEDSDATA        ASSUME1
BEGINMOV  AXDATA            DS初始化,1
        MOV  DSAX
        MOV  DXOFFSET MAXLEN        ;字符串输入,1
        MOV  AH0AH
        INT  21H
        MOV  DL0DH                    ;回车换行显示,1
        MOV  AH02H
        INT  21H
        MOV  DL0AH
        MOV  AH02H
        INT  21H
        LEA  BXSTR1                ;添加字符串结束标志,1
        PUSH  BX
        MOV  CLSTR1+1
        XOR  CHCH
        ADD  BXCX
        MOV  [BX],‘$
        POP  BX
LOP1 CMP  [BX],‘H                ;循环主体,2
        JNZ    L1
        MOV  [BX],‘T
L1    INC  BX
        LOOP  LOP1
        LEA  BXSTR1                ;字符串显示,1
        MOV  AH09H
        INT  21H
        MOV  AH4CH                    ;程序框架,1
        INT  21H
CODE  ENDS
END BEGIN

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。