微機原理與匯編作業
一、進制轉換
1.將下列十進制數轉換成二進制和十六進制:
(1)37 (2)231 (3)45.05 (4) 168.95
(3)45/2=22---1;22/2=11--0;11/2=5---1;5/2=2---1;2/2=1---0;1/2=0---1
101101.000011001100110011
2D.0CCCCCCC
0.052=0.1;0.12=0.2;0.22=0.4;0.42=0.8;0.82=1.6;0.62=1.2
1.(1)127 (2)-127
2.(1)347 (2)-347
3.(1)915 (2)-915
二、給出下列補碼表示的機器數的真值(用十進制表示)
1.8位長度的補碼數:
(1)1BH (2)80H (3)E3H
1110 0011 ---》0001 1101---》-29
2.16位長度的補碼數:
(1)397DH (2)FFFFH (3)8000H--》1000 0000 0000 0000 -》1000 0000 0000 0000-》-2^15
1111 1111 1111 1111--》0000 0000 0000 0001---》-1
三、用補碼運算完成下列運算,并指出運算是否產生溢出。
1.33H+5CH
0011 0011
0101 1100
1000 1111=8fH
OF=1
2.-29H+6EH=(-29H)+6EH= 1101 0111+0110 1110= 0011 1101=3DH OF=0
3.-30H-8AH=(-30H)+(-8AH)= 1101 0000+ 0111 0110= 0100 0110 =46H OF=0
4.4CH-78H
四、將下列十進制數分別轉換位壓縮BCD碼、非壓縮BCD碼、ASCII碼(用十六進制數表示)
1.38 2. 97 3. 255 4. 764 5. 1000
38H 0000 0011 0000 1000=0308H---》3338H
1000-》0001 0000 0000 0000--》1000H-》01000000H-》31303030H
五、掌握8086/8088的內部結構,并畫出。
七、簡述8086/8088內部寄存器及專用用途。
八、8086/8088標志寄存器FLAG包含哪幾個標志位?簡述各位的狀態含義及用途。
答:
狀態標志:存放運算結果的特征。6個狀態標志位(CF,PF,AF,ZF,SF,OF)
控制標志:控制某些特殊操作。3個控制標志位(TF,IF,DF)
狀態標志位:
C 進位標志
ALU進行算術運算時,反映運算結果最高位有無進位/借位。
C =“0” 無進位/借位 NC (匯編語言符號)
C =“1” 有進位/借位 C
P 奇偶標志
邏輯運算時,P反映ALU運算結果“1”的個數的奇偶性。
P = “0” 奇數個1 PO
P = “1” 偶數個1 PE
A 輔助進位標志,Ac
A位反映ALU進行算術運算時,D3向D4是否有無進位/借位。
A =“0” 無進位/借位
A =“1” 有進位/借位
A位通常供CPU內部調整用
Z 全零標志
ALU運算結果是否為零,適用于算術、邏輯運算。
Z =“0” 結果不為零 NZ
Z =“1” 有進位/借位 Z
S 符號標志
ALU運算結果最高位。
S = “0” 結果為正 NS
S = “1” 結果為負 S
O 溢出標志
判斷帶符號數加減運算結果是否溢出。
O =“0” 溢出 NO
O =“1” 不溢出 O
無符號數溢出判斷用C標志。
控制標志位的名稱和定義
T 單步標志、陷阱標志
T=1可使微處理器進入跟蹤方式,即單步調試狀態。
I 中斷允許標志
用來控制CPU是否允許響應可屏蔽中斷。
I = “0” 表示不允許CPU響應可屏蔽中斷
I = “1” 表示允許CPU響應可屏蔽中斷。
可用指令置位和復位
D 方向標志
用于指定字符串處理指令的步進方向。
D =“0” 遞增方向 低地址向高地址方向進行
D =“1” 遞減方向 高地址向低地址方向進行
可用指令置位和復位
九、在實地址方式中,設CS=0A10H,共有179字節長度的代碼段,試給出該代碼段末地址的邏輯地址和物理地址。
答:該代碼段偏移地址位0~178,而178=256-78=100H-4EH=B2**
所以代碼段點地址范圍是0A10H:0000H~0A10H:00B2H**
末地址的邏輯地址:0A10H:00B2H**
末地址的物理地址:0A10H10H+00B2H=A1B2H*
十、在實地址方式中,若DS=095FH,物理地址是11820H,試給出對應的邏輯地址;當DS=2F5FH時,物理地址是多少?
答:邏輯地址=段基地址:偏移地址11820H-095F0H=8230H
邏輯地址:0995FH:8230H
物理地址:2F5F0H+8230H=37820H
十一、宏匯編語言中,符號常量定義有哪些方式?數值表達式中常用的運算符有哪些?
答:
符號常量定義方式:
(1)數值常量
常用的有二進制數、十進制數、十六進制數和ASCII字符
其中ASCII字符做數值常量時,需加單引號
如: 1010B, 10,0AH,’A’,’$’,’ABC’
(2)符號常量
程序中為經常使用的數值取的名。用EQU或“=”偽指令定義,如:
P EQU 314
P=314
數值表達式中常用的運算符有:
(1)算術運算符:+,-,×,/,MOD(求余)
(2)邏輯運算符:AND,OR,XOR,NOT
(3)關系運算符:EQ(=),NE(≠),LT(<),GT(>),LE(≤),GE(≥)
十二、八、宏匯編語言中,標號表示什么?有哪些定義方式?有哪三個屬性?
答:
標號表示:
當程序中要跳轉到另一位置時,需要有一個標識來指示新的位置,這就是標號,通過在目標地址的前面放上一個標號,可以在指令中使用標號來代替直接使用地址標號是為一組機器指令所起名字.標號可有可無,只有當需要用符號地址來訪問該語句時,才給此語句賦予標號.標號是程序目標標志,總是和某地址相聯系,供轉移或循環指令控制轉移使用.
標號定義方式:
標號只在代碼段中定義和使用,定義的方式有兩種:
(1)書寫在符號指令前,用:定義,為NEAR類型, NEAR型標號只能在段內 使用!
例: CYCLE:MOV AL,[SI] ;定義近標號CYCLE
(2)用PROC…ENDP偽指令定義過程名
例:ABC PROC FAR ;定義過程名ABC為FAR型標號
.
.
.
ABC ENDP
標號的三個屬性:
(1)段地址—定義該標號所在段的段首址
(2)偏移地址—標號所在段的段首址到該標號定義指令的字節距離
(3)類型—NEAR和FAR兩種
NEAR—段內調用,FAR—段間調用
十三、 簡述符號指令的尋址方式。
答:尋址方式——尋找操作數據存放位置(地址)的方式,尋址方式可分為三大類:
(1)立即尋址:操作數就是操作數據
(2)寄存器尋址:操作數是寄存器名
(3)存儲器尋址 :操作數是地址表達式
十四、給定如下數據段,完成相應任務。
DATA SEGMENT
S DB 1,2,3,4
W DW 1921H,4567H
S2 DB ‘ABCD’
S3 DW ‘12’,’34’
DATA ENDS
1、判斷下列指令是否是合法指令,如果不合法,請改正。
(1)MOV AX,S2
(2)34H,AX
(3)MOV W[AX],AX
(4)MOV [BX],15H
(5)MOV W[SI],CX
答:(1)MOV AX,S2合法
(2)34H,AX不合法,MOV AX,34H
(3)MOV W[AX],AX不合法,MOV W[BX/BP],AX
(4)MOV [BX],15H合法
(5)MOV W[SI],CX合法
十五、試給出執行下列指令后OF、SF、ZF、CF、AF、PF 6個可測試標志位的狀態(要求用16進制形式給出16位標志寄存器FLAG的值,其他各位均為0)。
-
MOV AX, 2345H
ADD AX, 3219H
AX=555EH->0101 0101 0101 1110->OF=0,SF=0,ZF=0,AF=0,PF=0,CF=0
FLAG:0000 0000 0000 0000->0000H
-
MOV BX,5439H
ADD BX,456AH
0101 0100 0011 1001
<u>+ 0100 0101 0110 1010</u>
1001 1001 1010 0011
BX=99A3H->1001 1001 1010 0011->OF=1,SF=1,ZF=0,AF=1,PF=1,CF=0
FLAG:0000 1000 1001 0100->0894H
-
MOV CX,3579H
SUB CX,4EC1H
CX= E6B8H
0011 0101 0111 1001
<u>- 0100 1110 1100 0001</u>
<u>1</u> 1110 0110 1011 1000->OF=0,SF=1,ZF=0,AF=0,PF=0,CF=0
FALG=0000 0000 1000 0100->0081H
5.設AX=1234H,BX=5678H,DX=90ABH,將AX中間8位(作為高8位),BX低4位和DX高4位(作為低4位)拼成一個新字放在AX中。編寫實現該要求的匯編程序DATAM1.ASM,并進行匯編和連接,得到相應的目標文件和執行文件。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
dw 10 dup(0)
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV AX,1234H
MOV BX,5678H
MOV DX,90ABH
MOV CL,4
SHL AX,CL
MOV AL,BL
SHL AL,CL
SHR DH,CL
OR AL,DH
ret
begin endp
code ends
end begin
6.設CX=5678H,要求將CX中間8位取反,高4位清0,低4位置1,結果放在CX中。編寫實現該要求的匯編程序DATAM2.ASM,并進行匯編和連接,得到相應的目標文件和執行文件。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV CX, 5678H
XOR CX, 0FFFFH
AND CH,0FH
OR CL,0FH
ret
begin endp
code ends
end begin
7.給定數據段如下:
DATA SEGMENTS
D DB 12H,34H,56H,78H,90H,ABH
DATA ENDS
設BX=03H,編寫匯編程序將數據段中以BX為偏移地址的連續3單元中的無符號數求和,并進行匯編和連接,得到相應的目標文件和執行文件。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
D DB 12H,34H,56H,78H,90H,ABH
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV BX,03H
MOV AX, 0
MOV AL, D[BX]
ADD AL, D[BX+1]
ADC AH, 0
ADD AL, D[BX+2]
ADC AH, 0
ret
begin endp
code ends
end begin
8.給定數據段如下:
DATA SEGMENTS
D DB 12H,34H,56H,78H,90H,ABH
DATA ENDS
設BX=02H,編寫匯編程序將數據段中以BX為偏移地址的連續4單元的內容顛倒過來,并進行匯編和連接,得到相應的目標文件和執行文件。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
D DB 12H,34H,56H,78H,90H,ABH
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV BX,03H
MOV AL, D[BX]
XCHG AL, D[BX+3]
MOV D[BX],AL
MOV AL, D[BX+1]
XCHG AL,D[BX+2]
MOV D[BX+1],AL
ret
begin endp
code ends
end begin
9.實現“鏡子”程序:從鍵盤輸入一串字符,在下一行照原樣顯示。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
IBUF DB 0FFH,0,0FFH DUP(0)
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV DX, OFFSET IBUF
MOV AH, 10
INT 21H
MOV BL, IBUF+1
MOV BH,0
MOV IBUF[BX+2],'$'
MOV DL,0AH
MOV AH,2
INT 21H
MOV DX, OFFSET IBUF+2
MOV AH,9
INT 21H
ret
begin endp
code ends
10.數據段中有一符號字數組變量ARRAY,第1個字是被除數,第2個字是除數,接著存放商和余數,請編寫匯編程序實現。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
ARRAY DW 1234H,56H,0,0
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV AX, ARRAY
CWD
MOV CX, ARRAY+2
IDIV CX
MOV ARRAY+4, AX
MOV ARRAY+6,DX
ret
begin endp
code ends
11.編寫求兩個4位非壓縮BCD數之和,將和送顯示器顯示的程序。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
DATA1 DB 09H,04H,03H,08H
DATA2 DB 08H,06H,05H,07H
SUM DB 5 DUP(0)
OUTBUF DB 6 DUP(0)
ARRAY DW 1234H,56H,0,0
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV AX, 0
MOV BX,0
AGAIN: MOV AL,O
ADD AL,AH
MOV AH,0
ADD AL, DATA1[BX]
ADC AH, 0
ADD AL, DATA2[BX]
ADC AH,0
MOV SUM[BX],AL
INC BX
CMP BX, 4
JB AGAIN
MOV SUM[BX], AH
MOV SI,0
AGAIN2:
MOV AL, SUM[BX]
ADD AL, 30H
MOV OUTBUF[SI],AL
DEC BX
INC SI
CMP SI,5
JB AGAIN2
MOV OUTBUF[SI],’$’
MOV DX,OFFSET OUTBUF
MOV AH,9
INT 21H
ret
begin endp
code ends
12.編寫程序,將字節變量BVAR中的無符號二進制數(0~FFH)轉換為BCD數,在屏幕上顯示結果。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
BVAR DB 0DFH
OUTBUF DB 4 DUP(0)
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV AL, BVAR
MOV SI,3
MOV OUTBUF[SI],’$’
MOV CL,10
AGAIN: MOV AH,0
DIV CL
ADD AH,30H
DEC SI
MOV OUTBUF[SI], AH
CMP AL,0
JNE AGAIN
LEA DX, OUTBUF[SI]
MOV AH,9
INT 21H
ret
begin endp
code ends一、寫出下列程序段的中間結果和最后結果。
1.MOV AX, 0809H
MUL AH ;AX= 0048H
AAM ;AX= 0702H
2.MOV AX,0809H
MOV DL,5
AAD ;AX= 0059H
DIV DL ;AX= 0411H
MOV DL,AH
AAM ;AX= 0107H ,DL= 04H
3.MOV AX,0809H
ADD AL,AH
MOV AH,0 ;AX= 0011H
AAA ;AX= 0107H
4.MOV AX,0809H
MOV DL, 10
XCHG AH,DL
MUL AH ;AX= 005AH
AAM ;AX= 0900H
ADD AL, DL ;AX= 0908H
5.MOV AL, 98H
MOV AH,AL
MOV CL, 4
SHR AH,CL
AND AL, 0FH
AAD ;AL= 62 H
6.MOV CL,248
XOR AX,AX
MOV CH, 8
AG:SHL CL, 1
ADC AL, AL
DAA
ADC AH, AH
DEC CH
JNZ AG
結果:AX= 248 H
二、分別給出實現下列功能的完整匯編程序。
13.設平面上一點P的直角坐標為(X,Y),X和Y為字類型符號數,試編程實現:若P落在第i象限內,則令k=i;若P落在坐標軸上,則令k=0。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
K DB 0
POINT DB -12, 89
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV CL, 0 ;記錄坐標的象限,
MOV AL, POINT
MOV DL, POINT+2
CMP AL, 0
JZ XYZ
JS XS
CMP DL, 0
JZ XYZ
JS YS1
MOV CL, 1
JMP XYZ
YS1: MOV CL, 4
JMP XYZ
XS: CMP DL, 0
JZ XYZ
JS YS2
MOV CL, 2
JMP XYZ
YS2: MOV CL 3
XYZ: MOV K, CL
ret
begin endp
code ends
14.編程實現:將鍵盤輸入的8位二進制數以十六進制數形式在顯示器上顯示出來。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
INPUT DB 9, 0, 9 DUP(0)
OBUF DB 3 DUP(0)
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV DX, OFFSET INPUT
MOV AH,10
INT 21H 讀入數據
MOV SI, 0
MOV CX, 8
MOV AL, 0
AG: SHL AL, 1
AND BYTE PTR [SI], 0FH
ADD AL, [SI]
DEC SI
LOOP AG ;實現二進制串轉換為數據
MOV SI, OFFSET OBUF+2
MOV BYTE PTR[SI], ‘$’
MOV CL, 4
LOP : MOV AH, AL
AND AH, 0FH
ADD AH, 30H
CMP AH, 39H
JNA NEXT ;是否大于9
ADD AH, 7
NEXT: DEC SI
MOV [SI], AH
SHR AL, CL
AND AL, AL
JNZ LOP ;轉換為對應的十六進制的ASCII碼
MOV DX, SI
MOV AH,9
INT 21H
ret
begin endp
code ends
二、下列各數稱為Fibonacci數:0,1,1,2,3,5,8,13,...,這些數之間的關系是:從第3項開始,每項都是前兩項的之和,試編寫顯示第24項Fabonacci數(兩字節)的程序。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
OBUF DB 6 DUP(0)
data ends
code segment
begin proc far
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV AX, 0
MOV BX, 1
MOV CX, 22
AG: MOV DX, 0
ADD DX, AX
ADD DX, BX
MOV AX, BX
MOV BX, DX
LOOP AG ;AX存放第i-2項,BX存放第i-1項,DX存放第i項
MOV SI, OFFSET OBUF+5
MOV BYTE PTR[SI], ‘$’
MOV CX, 10
MOV AX, DX ;第24項在dx中
LOP : MOV DX, 0
DIV CX
DEC SI
ADD DL, 30H
MOV [SI], DL
AND AX, AX
JNZ LOP ;轉換為對應的十進制的ASCII碼
MOV DX, SI
MOV AH, 9
INT 21H
ret
begin endp
code ends
三、從鍵盤輸入一字符串(字符數>1),然后在下一行以相反的次序顯示出來(采用9號和10號系統功能調用)。
stack segment stack 'stack'
dw 32 dup(0)
stack ends
data segment
IBUF DB 255, 0, 255 DUP(0)
OBUF DB 255 DUP(0)
OBUF1 DB 0AH, 0DH, ‘’
AG: MOV AL, [SI]
DEC DI
MOV OBUF[DI], AL
INC SI
LOOP AG ;實現字符串的逆向拷貝
MOV DX OFFSET OBUF1
MOV AH, 9
INT 21H
MOV DX, OFFSET OBUF
MOV AH, 9
INT 21H
ret
begin endp
code ends
1.什么是總線?微型計算機內常用的總線有幾類?
答:總線是一種數據通道,系統各部件共享總線可同時掛接多個部件總線上任一部件發送的信息,系統內連接到總線上的部件均可收到,信息傳輸時,每次只能有一個發送部件可利用總線給一個接收部件發送信息。
總線分為:內部總線和CPU總線、局部總線、外部總線
2.簡述8086/8088的最小組態和最大組態的區別。
答:最小組態→用8088微處理器構成一個較小系統,即所連的存儲器容量不大,I/O端口也不多,此時系統的控制總線由8088直接提供.
最大組態→用8088構成一個較大系統時,系統的控制信號不能由CPU直接提供,而必須由總線控制器控制產生
最小組態,就是在系統中只有8086/8088一個微處理器;最大組態中,包含兩個或多個微處理器,其中主處理器是8086/8088,其他處理器是協處理器(如數值運算處理器8087,輸入/輸出協處理器8089)。
3.RESET信號來到之后,8086/8088CPU的CS和IP分別等于多少?
答:高電平的RESET信號維持4個時鐘周期以上時,CPU結束當前操作,復位信號RESET(高電平有效)cpu清零標志寄存器ip ds ss es以及指令隊列,將cs置ffffh。因此當復位信號變為低電平時,cpu從ffff0h開始執行程序。
4.什么時指令周期、總線周期、機器周期和時鐘周期?
答:指令周期→執行一條指令所需要的時間.8088中不同指令的指令周期是不等長的.最短2個時鐘周期,最長200個時鐘周期(如:16位乘除法指令)
總線周期→把指令周期劃分為一個個總線周期.基本的總線周期有存儲器讀/寫、I/O端口讀/寫和中斷響應周期如,從存儲器存取一個字節就是一個總線周期
機器周期:通常用從內存中讀取一個指令字的最短時間來規定CPU周期(機器周期),也即CPU完成一個基本操作所需的時間。
時鐘周期:一個時鐘脈沖所需要的時間。在計算機組成原理中又叫T周期或節拍脈沖。是CPU和其他單片機的基本時間單位。對CPU來說,在一個時鐘周期內,CPU僅完成一個最基本的動作。
5.存儲器讀周期和寫周期的主要區別是什么?
答:讀寫周期:兩次存儲器讀/寫操作的最短時間間隔。存儲周期:稍大于讀寫周期,(在讀寫周期的基礎上加上必要的其他操作)。讀周期或寫周期:讀寫周期具體到或讀或寫。為了區分存儲體內的存儲單元,必須將它們逐一進行編號,稱為地址。地址與存儲單元之間一一對應,且是存儲單元的唯一標志。應注意存儲單元的地址和它里面存放的內容完全是兩回事。存儲器在計算機中處于不同的位置,可分為主存儲器和輔助存儲器。在主機內部,直接與CPU交換信息的存儲器稱主存儲器或內存儲器。
- 用2114(1k×4)、6116(2KB)和6264(8KB)分別組成容量為64k×8位的存儲器,各需要多少芯片?地址需要多少位作為片內地址選擇端?多少位地址作為芯片選擇端?
16位地址,2114:片內10位字選,高6位作為片選
6116:片內11位,高5位
6264:片內13位,高3位
- | |
| | [圖片上傳失敗...(image-5e8e3c-1594039955154)]
| 用32片SARM 6116組成存儲器,僅用74LS138譯碼器設計其譯碼電路。
16位,11位片內,高5位
A15A14 A13A12A11 xxx xxxx xxxx
- 用EPROM2764(8KB)和SRAM 6264(8KB)各一片組成存儲器,其地址范圍為FC000H~FFFFFH,試畫出存儲器與8088的連接圖(限用74LS138)。
1111 1100 0000 0000 0000 0000
1111 1101 1111 1111 1111 1111
1111 1110 0000 0000 0000 0000
1111 1111 1111 1111 1111 1111
[圖片上傳失敗...(image-fe7206-1594039955155)]
chabud微機原理與匯編第十五次作業
接口的傳送控制方式有哪些?并分別進行介紹。
分別簡述標準的I/O尋址方式和存儲器映像I/O尋址方式。
試畫出8個I/O端口地址260H~267H的譯碼電路(譯碼電路有8個輸出端)。
10 0110 0000
10 0110 0111
[圖片上傳失敗...(image-f746ef-1594039955155)]
- 已知中斷向量表中,001C4H存放2200H,001C6H中存放3040H,則其中斷類型碼是<u> 71 </u> H,中斷服務程序的邏輯地址和物理地址分別是<u>3040</u> H:<u>2200</u> H和 <u> 32600 </u>H。