一、填空题
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