重庆自考网报名入口
您当前所在位置所在位置:重庆自考网   /   备考试题   /   

重庆自考汇编语言自测试题

 一、填空题

 1、请用一条指令实现如下操作:
 (1)将AX中划‘X’的位清0
    15   5  4   0
  ┏┳┳┳┳┳┳┳┳┳┳━┳━┳┳┳┳┓
  ┃┃┃┃┃┃┃┃┃┃┃X┃X┃┃┃┃┃ 指令:__________________
  ┗┻┻┻┻┻┻┻┻┻┻━┻━┻┻┻┻┛ 

  (2)寄存器的低四位取反:_________________

  2、三个重复前缀指令为__________________、________________、______________。

  3、DB指令以_______________为单位分配存贮;DD指令以__________为单位分配存贮。
  故如下数据定义:
  V1 DB 4 DUP(2),2
  COUNT EQU 10
  V2 DD COUNT DUP(?)
  为变量V1分配_____个字节存贮;为变量V2分配_____个字节存贮。

  4、设(CS)=25FFH,(DS)=2140H,(SS)=2510H,(BP)=02D0H,(SI)=0010H,(DI)=0206H,
  则(1)指令MOV AX,[BP+SI+2]的源操作数有效地址为_______,物理地址为________
   (2)指令MOV AX,[DI+100H]的源操作数有效地址为_______,物理地址为________.

  5、8086/8088 CPU可访问2个独立的地址空间,一个为存贮器地址空间,其大小为____个字节;另一个为______,其大小为_______字节.

  6、设(AX)=1000H,(BX)=2340H,则在执行了指令CMP AX,BX后,CF标志值为____,ZF标志值为______。

  二、编写功能程序块

  1、将DX:BX:AX中的数右移4位。

  2、字变量ADDR的段地址在DS中,将ADDR字单元中1的个数存入CX 。(例如:[ADDR]=1000000100000100B,则1的个数为3 )

  3、设BX寄存器包含两个非组合BCD数,请将非组合BCD数转换成对应的组合BCD数,存入AL寄存器。

  三、简答题

  1、简述汇编语言相对高级语言的优点。

  2、简述8086CPU的中断响应过程。

  四、阅读程序,分析结果

  1、从键盘读入一字符串(长度小于40),将该串反转后,输出显示。
  MAXNO EQU 41
  SSEG SEGMENT STACK
  DW 100 DUP(?)
  SSEG ENDS
  DSEG SEGMENT
  MESG1 DB 'INPUT A STRING:$'
  MESG2 DB 'IT'S REVERSE IS:'
  BUF DB MAXNO,?,MAXNO DUP(?)
  DSEG ENDS
  CSEG SEGMENT
  ASSUME CS:CSEG,DS:DSEG
  START:________________
  MOV DS,AX
  MOV DX,OFFSET MESG1
  MOV AH,9
  INT 21H
  MOV DX,OFFSET BUF
  __________________
  INT 21H
  XOR AX,AX
  __________________ ;取实际读入字符个数
  LEA DI,BUF+2
  MOV SI,DI
  ADD SI,AX
  MOV BYTE PTR [SI],'$'
  DEC SI
  CONT:
  CMP DI,SI
  _______________
  MOV AL,[SI]
  XCHG AL,[DI]
  DEC SI
  ________________ ;调整DI
  JMP CONT
  FINISHD:
  LEA DX,BUF+2
  MOV AH,9
  INT 21H
  MOV AX,4C00H
  INT 21H
  CSEG ENDS
  END START

  2、设num1,num2都为字变量,各存贮一个有符号数,请指出下面语句序列的功能
  MOV AX,num1
  XOR DX,DX
  OR AX,AX
  JNS SKIP
  MOV DX,OFFFFH
  SKIP: Ispan num2

  五、判断正误,若判断为错,请说明理由

  1、MOV DS,0

  2、MOV AX,[SI][DI]

  3、MOV BYTE PTR[BX],10H

  4、每个汇编语言源程序模块都必须以END伪指令结束。END伪指令用于向汇编程序指示源程序的结束;在需要时,还可以用于程序入口地址。

  5、设AX寄存器中为一个有符号数,用如下语句序列完成:
  CMP AX,0
  JE DONE
  MOV AX,-1
  JL DONE
  MOV AX,1
  DONE:


  附:99年北京市汇编语言自考上机题:

  要求:从键盘输入一组四位的十进制数,每组数中间以空格分割,以回车作为输入结束标志,后将这组数按升序输出。
  用汇编语言实现,方法不限。
  时间:三小时。

  下面给出此题一解法:(注:实现方法很多,这里只供参考)
  方法:在内存中开辟一串以字为单位的内存单元,为了存放输入的四位十进制数,由于从键盘输入的每一次数均为0-9的一位十进制数,它的输入编码为30H-39H的八位二进制数,将它的高四位置0,就可以得到一个四位二进制数,将第一次输入的数暂存由一个寄存器中,等第二次输入并处理为一个高四位为0的十进制数后,将寄存器左移四位后与新输入的数相加,依次输入完四位十进制数,可以得到一个十六位的BCD码,将寄存器内的数放入内存单元(一个字),待全部数输入完后就可将内存单元中的乱序BCD码排序,然后将排序后的BCD码输出,就为升序的十进制数。
  (如有更好的方法请将原代码发送至djxhome@263.net)


  data segment ;设置数据段
  in_disp db 'input:$'
  out_disp db 'output:$'
  numb dw 100 dup(0)
  data ends

  code segment ;设置代码段
  assume cs:code,ds:data
  start:
  mov ax,data ;将数据段段寄存器DS置为实际地址
  mov ds,ax

  lea dx,in_disp ;显示提示信息
  mov ah,9
  int 21h

  sub bx,bx
  sub cx,cx
  sub di,di
  sub si,si

  r1: ;输入数组到内存
  mov ah,1
  int 21h
  cmp al,0dh
  jz exit1
  cmp al,' '
  jz nub_mem
  sub al,30h
  mov cl,4
  shl bx,cl
  add bl,al
  jmp r2
  nub_mem:
  mov numb[si],bx
  add si,2
  inc di ;累计输入个数
  sub bx,bx
  r2:
  jmp r1

  exit1:
  mov numb[si],bx
  inc di

  mov dl,0ah ;显示换行、回车
  mov ah,2
  int 21h
  mov dl,0dh
  mov ah,2
  int 21h

  mov cx,di ;进行排序
  dec cx
  sub bx,bx
  px:
  mov ax,numb[bx]
  mov si,2
  mov dx,cx
  px1:
  cmp ax,numb[bx+si]
  jc pxx
  xchg ax,numb[bx+si]
  mov numb[bx],ax
  pxx:
  add si,2
  dec dx
  jnz px1
  add bx,2
  loop px

  lea dx,out_disp ;显示输出提示
  mov ah,9
  int 21h

  sub si,si ;输出排序后的数组
  r3:
  mov bx,numb[si]

  mov dl,bh
  mov cl,4
  shr dl,cl
  add dl,30h
  mov ah,2
  int 21h

  mov dl,bh
  and dl,0fh
  add dl,30h
  mov ah,2
  int 21h

  mov dl,bl
  mov cl,4
  shr dl,cl
  add dl,30h
  mov ah,2
  int 21h

  mov dl,bl
  and dl,0fh
  add dl,30h
  mov ah,2
  int 21h

  mov dl,' '
  mov ah,2
  int 21h

  add si,2
  dec di
  jnz r3

  mov ah,4ch ;调用DOS 21H的4C子功能返回DOS
  int 21h

  code ends
  end start

 

相关推荐