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