16/32位微機原理、匯編語言及接口技術(shù)-錢曉捷-第2版-課后習(xí)題答案_第1頁
16/32位微機原理、匯編語言及接口技術(shù)-錢曉捷-第2版-課后習(xí)題答案_第2頁
16/32位微機原理、匯編語言及接口技術(shù)-錢曉捷-第2版-課后習(xí)題答案_第3頁
16/32位微機原理、匯編語言及接口技術(shù)-錢曉捷-第2版-課后習(xí)題答案_第4頁
16/32位微機原理、匯編語言及接口技術(shù)-錢曉捷-第2版-課后習(xí)題答案_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第一章

1.1解:

五代,詳細(xì)見書

1.2解:

微型計算機:以大規(guī)模、超大規(guī)模集成電路

為主要部件,以集成了計算機主要部件一一控

制器和運算器的微處理器為核心,所構(gòu)造出的

計算機系統(tǒng)。

PC機:PC(PersonalComputer)機就是面

向個人單獨使用的一類微機。

單片機:用于控制的微處理器芯片,內(nèi)部除

CPU外還集成了計算機的其他一些主要部件,

如:ROM、RAM、定時器、并行接口、串行接口,

有的芯片還集成了A/D、D/A轉(zhuǎn)換電路等。

數(shù)字信號處理器DSP:主要面向大流量數(shù)字

信號的實時處理,在宿主系統(tǒng)中充當(dāng)數(shù)據(jù)處理

中心,在網(wǎng)絡(luò)通信、多媒體應(yīng)用等領(lǐng)域正得到

越來越多的應(yīng)用

1.3解:

微機主要有存儲器、I/O設(shè)備和I/O接口、

CPU、系統(tǒng)總線、操作系統(tǒng)和應(yīng)用軟件組成,各

部分功能如下:

CPU:統(tǒng)一協(xié)調(diào)和控制系統(tǒng)中的各個部件

系統(tǒng)總線:傳送信息

存儲器:存放程序和數(shù)據(jù)

I/O設(shè)備:實現(xiàn)微機的輸入輸出功能

I/O接口:I/O設(shè)備與CPU的橋梁

操作系統(tǒng):管理系統(tǒng)所有的軟硬件資源

1.4解:

系統(tǒng)總線:傳遞信息的一組公用導(dǎo)線,CPU

通過它們與存儲器和I/O設(shè)備進行信息交換。

好處:組態(tài)靈活、擴展方便

三組信號線:數(shù)據(jù)總線、地址總線和控制總

線。

其使用特點是:在某一時刻,只能由一個總

線主控設(shè)備來控制系統(tǒng)總線,只能有一個發(fā)送

者向總線發(fā)送信號;但可以有多個設(shè)備從總線

上同時獲得信號。

1.5解:

(1)用于數(shù)值計算、數(shù)據(jù)處理及信息管理方

向。采用通用微機,要求有較快的工作速度、

較高的運算精度、較大的內(nèi)存容量和較完備的

輸入輸出設(shè)備,為用戶提供方便友好的操作界

面和簡便快捷的維護、擴充手段。

(2)用于過程控制及嵌入應(yīng)用方向。

采用控制類微機,要求能抵抗各種干擾、適應(yīng)

現(xiàn)場的惡劣環(huán)境、確保長時間穩(wěn)定地工作,要

求其實時性要好、強調(diào)其體積要小、便攜式應(yīng)

用強調(diào)其省電。

1.6解:

1.7解:

I/O通道:位于CPU和設(shè)備控制器之間,其

目的是承擔(dān)一些原來由CPU處理的I/O任務(wù),

從而把CPU從繁雜的I/O任務(wù)中解脫出來。由

10根信號線組成(A9-A0)o

1.8解:

BIOS:基本輸入輸出系統(tǒng)。

主要功能:用來驅(qū)動和管理諸如鍵盤、顯示

器、打印機、磁盤、時鐘、串行通信接口等基

本的輸入輸出設(shè)備

1.9解:

基本RAM區(qū):640KB

保留RAM區(qū):128KB

擴展ROM區(qū):128KB

基本ROM區(qū):128KB

1.10解:

(1)、數(shù)一用來直接表征量的大小,包括:

定點數(shù)、浮點數(shù)。

(2)、碼一用來指代某個事物或事物的某種

狀態(tài)屬性,包括:二進制、八進制、十進制、

十六進制。

區(qū)別:使用場合不同,詳見P16.

1.11解:

(1)

(174.66)IO=(1O1O1UO.1O1O1)2

(174.66)10=(AE.A8)16

(2)

(100011101011.01011)2=(2283.34375)10

(100011101011.01011)2=(8£B.58)16

(3)

(F18A6.6)16=(11110001100010100110.0110)2

(F18A6.6)16=(989350.375)10

1.12解:

原碼反碼補

+3700100101/25H00100101/25H

00100101/25H

-3710100101/A5H11011010/DAH

11011011/DBH

1.13解:

+37-37

1632位16位32位

00000000FFFFFFFF

25H25H5BH5BH

1.14解:

無符號數(shù):70D

補碼有符號數(shù):70D

BCD碼:46D

ASCII:F

1.15解:

1)、相加后若出現(xiàn)和大于9,則將和減去10

后再向高位進1

2)、若出現(xiàn)組間進位,則將低位加6

1.16解:

詳見課本16頁。

1.17解:

C3402000

1.18解:

5050H

十進制5080

二進制十六進二進制十六進

制制

001132H010150H

0010B0000B

1.19解:

D:44H

d:64H

CR:ODH

LF:OAH

0:30H

SP:20H

NUL:OOH

1.20解:

國標(biāo)碼:3650H

機內(nèi)碼:B6BOH

第二章

2.1

算術(shù)邏輯單元ALU、寄存器組和控制器;

總線接口單元BIU:管理8088與系統(tǒng)總線的接

口負(fù)責(zé)cpu對接口和外設(shè)進行訪問

執(zhí)行單元EU:負(fù)責(zé)指令譯碼、執(zhí)行和數(shù)據(jù)運算;

8位cpu在指令譯碼前必須等待取指令操作的

完成,8088中需要譯碼的指令已經(jīng)取到了指令

隊列,不需要等待取指令。而取指令是cpu最

為頻繁的操作,因此8088的結(jié)構(gòu)和操作方式節(jié)

省了大量等待時間,比8位cpu節(jié)省了時間,

提高了性能。

2.2

8個8位寄存器:AH、AL、BH、BL、CH、CL、

DH、DL;

8個16位寄存器:累加器AX、基址寄存器BX、

計數(shù)器CX、數(shù)據(jù)寄存器DX、源地址寄存器SI、

目的地址寄存器DI、基址指針BP、堆棧指針SPo

2.3

標(biāo)志用于反映指令執(zhí)行結(jié)果或者控制指令執(zhí)行

形式。

狀態(tài)標(biāo)志用于記錄程序運行結(jié)果的狀態(tài)信息;

控制標(biāo)志用于控制指令執(zhí)行的形式。

2.4

例:有運算:3AH+7CH=B6H

作為無符號數(shù)運算,沒有進位,

CF=O;

作為有符號數(shù)運算,結(jié)果超出范

圍,OF=1.

2.5

8088中每個存儲單元有唯一的20位地址,稱為

物理地址。處理器通過總線存取存儲器數(shù)據(jù)時,

采用這個物理地址。

在用戶編程過程中采用的“段地址:偏移地址”

的形式稱為邏輯地址。

將邏輯地址中的段地址左移4位,加上偏移地

址就得到物理地址。

1MB最多能分成65536個邏輯段。

2.6

代碼段:存放程序的指令序列;

堆棧段:確定堆棧所在的主存儲區(qū);

數(shù)據(jù)段:存放當(dāng)前運行程序的數(shù)據(jù);

附加段:附加數(shù)據(jù)段,用于數(shù)據(jù)保存。另外

串操作指令將其作為目的操作數(shù)的存放區(qū)。

2.7

8088的存儲空間分段管理,程序設(shè)計時采用邏

輯地址。由于段地址在默認(rèn)的或指定的段寄存

器中,所以只需要偏移地址,稱為有效地址EA.

操作數(shù)在主存中有以下幾種尋址方式:直接尋

址、寄存器間接尋址、寄存器相對尋址、基址

變址尋址、相對基址變址尋址。

2.8

(1)立即數(shù)尋址ax:1200H

(2)寄存器尋址ax:0100H

(3)存儲器直接尋址ax:4C2AH

(4)寄存器間接尋址ax:3412H

(5)寄存器間接尋址ax:4C2AH

(6)基址變址尋址ax:7856H

(7)相對基址變址尋址ax:65B7H

2.9

(l)cx為字寄存器,dl為字節(jié)寄存器,類型不

匹配。

(2)mov指令的目的操作數(shù)只能是寄存器或者

主存單元,ip是指針。

(3)不允許立即數(shù)到段寄存器的傳送。

(4)不允許段寄存器之間的直接傳送。

(5)數(shù)據(jù)溢出。

(6)sp不能用于寄存器間接尋址。

(7)格式不對。應(yīng)為:movax,[bx+di]

(8)mov指令的操作數(shù)不能是立即數(shù)。

2.10

(1)bx得到table的偏移地址,bx=200H.

(2)將立即數(shù)8送到al。

(3)換碼,al=12H.

2.11

(1)al=89H

(2)al=12H,cf=l/zf=0/sf=0/of=l/pf=l

(3)al=0AFH,cf=0/zf=0,sf=l/of=0/pf=l

(4)al=OAFH/cf=l,zf=O,sf=l,of=1,pf=1

(5)al=0/cf=0/zf=l/sf=0/of=0,pf=l

(6)al=0FFH/cf=0/zf=0/sf=l,of=0/pf=l

(7)al=0,cf=0/zf=l/sf=0;of=0/pf=l

2.12

(1)adddx,bx

(2)addaljbx+si]

(3)addwordptr[bx+0B2H],cx

(4)addwordptr[0520H],3412H

(5)addal,0A0H

2.13

運算公式:(v-z—x*y+54o)/x。商存儲在ax,余數(shù)

存儲在dxo

2.14

(1)ax=1470H

(2)ax=1470H/cf=0/of=0/sf=0/zf=0,pf=0

(3)ax=1470H/cf=0,of=0,sf=0/zf=0/pf=0

(4)ax=0/cf=0,of=0/sf=0/zf=l/pf=l

(5)ax=0FFFFH/cf=0/of=0/sf=0,zf=l/pf=l

(6)ax=0FFFFH/cf=0/of=0,sf=l,zf=0/pf=l

2.15

相對尋址方式、直接尋址方式、間接尋址方式。

2.16

(1)1256H

(2)3280H

2.17

(1)ax=lElEH

(2)al的DO、D7位不全為0

(3)cx<64H

2.18

執(zhí)行65536次。

2.19

功能:將數(shù)組中每個字元素相加,結(jié)果存儲于

totalo

2.20

(1)leasizstring

Movdh,[si]

Movdl,[si+5]

(2)movaxwordptrbufferl

Subaxwordptrbuffer2

Movdxwordptrbufferl+2

Sbbdxwordptrbuffer2+2

(3)testdx,OFOOOH

jzeven

even:movax,0

(4)movcx,4

again:sardx,l

rcraxzl

loopagain

(5)movcx,100

movsi,0

again:moval,OFFH

addal,array[si]

movarray[si],al

incsi

loopagain

2.21

Htoascproc

Movbl,al

Moval,ah

Movbh,10

Muibh

Andax^OFFH

Addal,bl

Htoend:ret

Htoascendp

2.22

計算機系統(tǒng)利用中斷為用戶提供硬件設(shè)備驅(qū)動

程序。在IBM-PC系列微機中,基本輸入輸出系

統(tǒng)ROM-BIOS和DOS都提供了豐富的中斷服務(wù)

程序,稱為系統(tǒng)功能調(diào)用。

調(diào)用步驟(1)AH中設(shè)置系統(tǒng)功能調(diào)用號

(2)在指定寄存器中設(shè)置入口參數(shù)

(3)使用中斷調(diào)用指令執(zhí)行功能調(diào)用

(4)根據(jù)出口參數(shù)分析調(diào)用情況

2.23

Htoascproc

AndabOFH

Addal,90H

Daa

Adeal,40H

Daa

Movah,02H

Movdlzal

Int21H

Ret

Htoascendp

2.24

Numoutproc

Xorah,ah

Aam

Addax3030H

Movdl,ah

Movah,02H

lnt21H

Movdl,al

Movah,02H

lnt31H

Ret

Numoutendp

2.25

Msgkeydb"inputnumber

Msgwrgdb"error","$"

Movah,09H

Movdx,offsetmsgkey

Int21H

Again:movah,01H

Int21H

Cmpal,30H

Jbdisp

Cmpal,39H

Jadisp

Movdl,al

Movah,02H

lnt21H

Jmpdone

Disp:movdx,offsetmsgwrg

Movah,09H

lnt21H

Jmpagain

Done:movah,02H

Movdl,al

lnt21H

第3章

3.1解:

匯編語言是一種以處理器指令系統(tǒng)為基礎(chǔ)的

低級程序設(shè)計語言,它采用助記符表達指令操

作碼,采用標(biāo)識符號表示指令操作數(shù),可以直

接、有效地控制計算機硬件,因而容易創(chuàng)建代

碼序列短小、運行快速的可執(zhí)行程序

3.2解:

(1)完整的匯編語言源程序由段組成

(2)一個匯編語言源程序可以包含若干個代

碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間

的順序可隨意排列

(3)需獨立運行的程序必須包含一個代碼

段,并指示程序執(zhí)行的起始點,一個程序只有

一個起始點

(4)所有的可執(zhí)行性語句必須位于某一個代

碼段內(nèi),說明性語句可根據(jù)需要位于任一段內(nèi)

(5)通常,程序還需要一個堆棧段

3.3解:

存儲特點

模式

TINYCOM類型程序,只有一個小于64KB的邏輯段

SMAL小應(yīng)用程序,只有一個代碼段和一個數(shù)據(jù)段(

L于64KB

COMP代碼少、數(shù)據(jù)多的程序,只有一個代碼段,但

ACT

MEDI代碼多、數(shù)據(jù)少的程序,可有多個代碼段,只

UM

LARG大應(yīng)用程序,可有多個代碼段和多個數(shù)據(jù)段(

E

HUGE更大應(yīng)用程序,可有多個代碼段和多個數(shù)據(jù)段

FLAT32位應(yīng)用程序,運行在32位80x86CPU和Wir

3.4解:

開始位置:用標(biāo)號指明

返回DOS:利用DOS功能調(diào)用的4cH子功能

來實現(xiàn)

匯編停止:執(zhí)行到一條END偽指令時,停止

匯編

3.5解:

段定位、段組合和段類型。

3.6解:

stacksegmentstack

db1024(0)

stackends

datasegment

stringdbJHello,Assembly!,OdH,

OaH,'$'

dataends

codesegment'code,

assumecs:code,ds:data,ss:stack

start:movdx,offsetstring

movah,9

int21h

codeends

endstart

3.7解:

(1).EXE程序

程序可以有多個代碼段和多個數(shù)據(jù)段,程序

長度可以超過64KB

通常生成EXE結(jié)構(gòu)的可執(zhí)行程序

(2).COM程序

只有一個邏輯段,程序長度不超過64KB

需要滿足一定條件才能生成COM結(jié)構(gòu)的可執(zhí)

行程序(MASM6.x需要采用TINY模式)

3.8解:

符號定義偽指令有“等價EQU”和“等號=”:

符號名EQU數(shù)值表達式

符號名EQU〈字符串》

符號名=數(shù)值表達式

EQU用于數(shù)值等價時不能重復(fù)定義符號名,但

允許有重復(fù)賦值。例如:

X=7;等效于:Xequ7

X=X+5;"XEQUX+5”是錯誤的

3.9解:

(1)al=67h

(2)ax=133h,dx=4h

(3)ax=0230h

(4)al=41h

(4)ax=7654h

3.10解:

(1)

444]144?444?444*444

123(056111

hhhhhh

(2)

1000OfOf??9*9*??

hhbhfh

3.11解:.data

mylbdb'PersonalComputer5

my2bdb20

my3bdb14h

my4bdb00010100b

my5wdw20dup(?)

my6c=100

my7c=<'PersonalComputer5>

3.12解:

利用定位偽指令控制,如org,even,align

3.13解:

包括邏輯地址和類型兩種屬性。

3.14解:

;數(shù)據(jù)段

org100h

varwdwl234h,5678h

varbdb3,4

vardddl2345678h

buffddlOdup(?)

messdb5Hello'

;代碼段

movax,offsetvarb+offsetmess

movax,typebuff+typemess+typevard

movax,sizeofvarw+sizeofbuff+

sizeofmess

movax,lengthofvarw+lengthofvard

3.15解:

(1)1000超過一個字節(jié)所能表達的最大整數(shù)

(2)SI應(yīng)為偶數(shù)

(3)兩個內(nèi)存單元不能直接運算

(4)應(yīng)改為[al+1]

(5)條件轉(zhuǎn)移指令后面應(yīng)接標(biāo)號,而不是變

3.16解:

movah,1;只允許輸入小寫字母

int21h

subal,20h;轉(zhuǎn)換為大寫字母

movdl,al

movah,2

int21h;顯示

3.17解:

movbx,offsetLEDtable

moval,lednum

xlat

3.18解:

movax,bufX

cmpax,bufY

jaedone

movax,bufY

done:movbufZ,ax

3.19解:

.modelsmall

.stack

.data

bufXdw-7

signXdb?

.code

.startup

cmpbufX,0;testbufX,80h

jlnext;jnznext

movsignX,0

jmpdone

next:movsignX,-1

done:.exit0

end

3.20解:

movdl,’2'

movax,bufX

cmpax,bufY

jenextl

decdl

nextl:cmpax,bufZ

jenext2

decdl

next2:movah,2

int21h

3.21解:

;代碼段

moval,number

movbx,0;BX-記錄為1的位數(shù)

restart:cmpal,0;AL=O結(jié)束

jzdone

again:shral,1;最低位右移進入CF

jcnext;為1,轉(zhuǎn)移

incbx;不為1,繼續(xù)

jmpagain

next:pushax

pushbx

shlbx,1;位數(shù)乘以2(偏移地址要用

2個字節(jié)單元)

jmpaddrs[bx];間接轉(zhuǎn)移:IP-

[table+BX]

;以下是各個處理程序段

funO:movdl,'O'

jmpdisp

funl:movdl,'1'

jmpdisp

fun2:movdl,’2'

jmpdisp

fun3:movdl,'3'

jmpdisp

fun4:movdl,'4'

jmpdisp

fun5:movdl,'5'

jmpdisp

fun6:movdl,'6'

jmpdisp

fun7:movdl,,7,

jmpdisp

disp:movah,2,業(yè)小個字付

int21h

popbx

popax

jmprestart

done:???

3.22編制程序完成12H、45H、0F3H.6AH、

20H、OFEH、90H、0C8H、57H和34H等10個字

節(jié)數(shù)據(jù)之和,并將結(jié)果存入字節(jié)變量SUM中不

考慮溢出和進位)。

;wjxt322.asm

.modelsmall

.stack

.data

bdatadb

12h,45h,0f3h,6ah,20h,Ofeh,90h,0c8h,57h,3

4h;原始數(shù)據(jù)

numequ10;數(shù)據(jù)個數(shù)

sumdb?;預(yù)留結(jié)果單元

.code

.startup

xorsi,si;位移量清零

xoral,al;取第一個數(shù)

movex,num;累加次數(shù)

again:addal,b_data[si];累加

incsi;指向下一個數(shù)

loopagain;如未完,繼續(xù)累加

movsum,al;完了,存結(jié)果

.exit0

end

3.23求主存0040h:0開始的一個64KB物理

段中共有多少個空格?

;wjxt323.asm

.modelsmall

.code

start:movax,0040h;送段地址

movds,ax

movsi,0;偏移地址

movex,si;計數(shù)(循環(huán)次數(shù))

xorax,ax;空格計數(shù)器清零

again:empbyteptr[si],20h;與空格的

ASCH碼比較

jnenext;不是空格,轉(zhuǎn)

incax;是空格,空格數(shù)加1

next:incsi;修改地址指針

loopagain;cx=cx—1,如cx=0退

出循環(huán)

.exit0

endstart

3.24編寫計算100個16位正整數(shù)之和的程

序。如果和不超過16位字的范圍(65535),則

保存其和到wordsum,如超過則顯示

'overflow'。

答:

;數(shù)據(jù)段

countequ100

parraydwcountdup(?);彳般有100個數(shù)據(jù)

wordsumdw0

msgdb'overflow',$'

;代碼段

movex,count

movax,0

movbx,offsetparray

again:addax,[bx]

jncnext

movdx,offsetmsg

movah,9

int21h;顯示溢出信息

jmpdone;然后,跳出循環(huán)體

next:addbx,2

loot)again

movwordsum,ax

done:???

3.25編程把一個16位無符號二進制數(shù)轉(zhuǎn)換

成為用8421BCD碼表示的5位十進制數(shù)。轉(zhuǎn)換

算法可以是:用二進制數(shù)除以10000,商為“萬

位”,再用余數(shù)除以1000,得到“千位”;依次

用余數(shù)除以100、10和1,得到“百位”、“十

位”和“個位”。

;wjxt325.asm

.modelsmall

.stack256

.data

arraydw?;源字?jǐn)?shù)據(jù)

dbcddb5dup(?);五位bed結(jié)果,高對高

低對低

.code

.startup

movdx,array;取源數(shù)據(jù)(余數(shù))

movbx,10000;除數(shù)

?

movex,109除數(shù)系數(shù)

movsi,4;目的數(shù)據(jù)高位位移量

again:movax,dx*dx.ax中存放被除數(shù)

movdx,0

divbx?除于bx,商ax,余數(shù)dx

movdbcdfsi],al;商<10,存結(jié)果

pushdx?暫存余數(shù)

movax,bx?除數(shù)除于10

movdx,0

divex*dx.ax除于ex,商ax、余

數(shù)0存在dx

?

movbx,ax9bx是除數(shù)

popdx

decsi;目的數(shù)據(jù)位移量減1

jnzagain

movdbcd,dl;存?zhèn)€位數(shù)(<10)

.exit0

end

3.26解:

(1)匯編語言中,子程序要用一對過程偽指

令PROC和ENDP聲明,格式如下:

過程名PROC[NEAR|FAR]

……;過程體

過程名ENDP

(2)保護用到的寄存器內(nèi)容,以便子程序返

回時進行相應(yīng)的恢復(fù)。

(3)改錯:

crazyproc

pishbx

pushex

xorax,ax

xordx,dx

again:adda,[bx]

adcdx,0

incbx

incbx

loopagain

popex

popbx

3.27解(不需調(diào)用HTOASC子程序):

again:movah,1

int21h

empal,Ibh;ESC的ASCII碼是Ibh

jedone

movdl,al

movah,2

int21h;是大寫字母則轉(zhuǎn)換為小寫

字母

jmpagain

done:…

3.28解答:

asetobproc

pushex

anddh,Ofh;先轉(zhuǎn)換十位數(shù)

shldh,1;十位數(shù)乘以10(采用移位

指令)

movch,dh

shldh,1

shldh,1

adddh,ch

anddl,Ofh;轉(zhuǎn)換個位數(shù)

adddh,dl;十位數(shù)加個位數(shù)

moval,dh;設(shè)置出口參數(shù)

popex

ret

asetobendp

3.29解:

DIPASCproc;入口參數(shù):人1=要顯示的

一個16進制數(shù)

pushex

pushdx

pushax

movcl,4;轉(zhuǎn)換高位

shral,cl

callHTOASC

movdl,al;顯示

movah,2

int21h

popax;轉(zhuǎn)換低位

callHTOASC

movdl,al;顯示

movah,2

int21h

movdl,'H';顯示一個字母“H”

movah,2

int21h

popdx

popex

ret

DIPASCendp

HTOASCproc;將AL低4位表達的一位16

進制數(shù)轉(zhuǎn)換為ASCH碼

andal,Ofh

empal,9

jbehtoascl

addal,37h;是OAH-OFH,加37H轉(zhuǎn)

換為ASCH碼

ret;子程序返回

htoascl:addal,30h;是0?9,加

30H轉(zhuǎn)換為ASCII碼

ret;子程序返回

HTOASCendp

3.30解:

lucaseproc

pushbx

movbx,offsetstring

cmpal,0

jecaseO

cmpal,1

jzeasel

cmpal,2

jzcase2

jmpdone

caseO:cmpbyteptr[bx],0

jedone

cmpbyteptr[bx],'A'

jbnextO

cmpbyteptr[bx],'V

janextO

addbyteptr[bx],20h

nextO:incbx

jmpcaseO

easel:empbyteptr[bx],0

jedone

empbyteptr[bx],'a,

jbnextl

empbyteptr[bx],'z,

janextl

subbyteptr[bx],20h

nextl:incbx

jmpeasel

case2:empbyteptr[bx],0

jedone

empbyteptr[bx],'A'

jbnext2

empbyteptr[bx],'V

janext20

addbyteptr[bx],20h

jmpnext2

next20:empbyteptr[bx],'a'

jbnext2

empbyteptr[bx],'z'

janext2

subbyteptr[bx],20h

next2:incbx

jmpcase2

done:popbx

ret

lucaseendp

3.31解:

(1)用寄存器傳遞參數(shù):

最簡單和常用的參數(shù)傳遞方法是通過寄存器,只要把參數(shù)存于約定的寄存器中就可以

由于通用寄存器個數(shù)有限,這種方法對少量數(shù)據(jù)可以直接傳遞數(shù)值,而對大量數(shù)據(jù)只

能傳遞地址

采用寄存器傳遞參數(shù),注意帶有出口參數(shù)的寄存器不能保護和恢復(fù),帶有入口參數(shù)的

寄存器可以保護、也可以不保護,但最好能夠保持一致

(2)用共享變量傳遞參數(shù)

子程序和主程序使用同一個變量名存取數(shù)據(jù)就是利用共享變量(全局變量)進行參數(shù)

傳遞

如果變量定義和使用不在同一個源程序中,需要利用PUBLIC、EXTREN聲明

如果主程序還要利用原來的變量值,則需要保護和恢復(fù)

利用共享變量傳遞參數(shù),子程序的通用性較差,但特別適合在多個程序段間、尤其在

不同的程序模塊間傳遞數(shù)據(jù)

(3)用堆棧傳遞參數(shù)

參數(shù)傳遞還可以通過堆棧這個臨時存儲區(qū)。主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆

棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們

采用堆棧傳遞參數(shù)是程式化的,它是編譯程序處理參數(shù)傳遞、以及匯編語言與高級語

言混合編程時的常規(guī)方法

3.32解:

方法:主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)

壓入堆棧,主程序彈出堆棧取得它們

注意:壓棧與彈棧必須要一一對應(yīng)。

3.33解:

方法1:

neg32proc;入口參數(shù):DX.AX=32位有符號數(shù)

negax:實現(xiàn)0—DX.AX功能

negdx

sbbdx,0;這條指令也可以用decdx代替

ret

neg32endp;出口參數(shù):DX.AX=32位有符號數(shù)的補碼

方法2:

neg32proc;入口參數(shù):DX.AX=32位有符號數(shù)

notax;實現(xiàn)DX.AX求反加1

notdx

addax,1

adcdx,0

ret

neg32endp;出口參數(shù):DX.AX=32位有符號數(shù)的補碼

3.34解:

;數(shù)據(jù)段

arraydb12h,25h,OfOh,0a3h,3,68h,71h,Ocah,Offh,90h;數(shù)組

countequ$-array;數(shù)組元素個數(shù)

resultdb?;校驗和

;代碼段

movbx,offsetarray;BX一數(shù)組的偏移地址

movex,count;CX-數(shù)組的元素個數(shù)

callchecksum;調(diào)用求和過程

movresult,al;處理出口參數(shù)

movax,4c00h

int21h

;計算字節(jié)校驗和的通用過程

;入口參數(shù):DS:BX=數(shù)組的段地址:偏移地址,CX=元素個數(shù)

;出口參數(shù):AL=校驗和

;說明:除AX/BX/CX外,不影響其他寄存器

checksumproc

xoral,al;累加器清0

sum:addal,[bx];求和

incbx;指向下一個字節(jié)

loopsum

ret

checksumendp

end

3.35解:

(1)

.modelsmall

.stack

?data

wdatadw34abh

.code

?startup

movax,wdata

calldispa

.exit0

dispaproc

pushex

pushdx

movcl,4

movdl,ah

shrdl,cl

calldldisp

movdl,ah

anddl,Ofh

calldldisp

movdl,al

shrdl,cl

calldldisp

movdl,al

anddl,Ofh

calldldisp

popdx

popex

ret

dispaendp

dldispproc

pushax

ordl,30h

cmpdl,39h

jbedldispl

adddl,7

dldispl:movah,2

int21h

popax

ret

dldispendp

end

(2)

.modelsmall

.stack

.data

wdatadw34abh

wordtempdw?

,code

.startup

movax,wdata

movwordtemp,ax

calldispa

,exit0

dispaproc

pushex

pushdx

movcl,4

movdl,byteptrwordtemp+1

shrdl,cl

calldldisp

movdl,byteptrwordtemp+1

anddl,Ofh

calldldisp

movdl,byteptrwordtemp

shrdl,cl

calldldisp

movdl,byteptrwordtemp

anddl,Ofh

calldldisp

popdx

popex

ret

dispaendp

dldispproc

pushax

ordl,30h

cmpdl,39h

jbedldispl

adddl,7

dldispl:movah,2

int21h

popax

ret

dldispendp

end

(3)

.modelsmall

.stack

,data

wdatadw34abh

.code

,startup

pushwdata

calldispa

popax;addsp,2

,exit0

dispaproc

pushbp

movbp,sp

pushax

pushex

pushdx

movax,[bp+4]

movcl,4

movdl,ah

shrdl,cl

calldldisp

movdl,ah

anddl,Ofh

calldldisp

movdl,al

shrdl,cl

calldldisp

movdl,al

anddl,Ofh

calldldisp

popdx

popex

popax

popbp

ret

dispaendp

dldispproc

pushax

ordl,30h

empdl,39h

jbedldispl

adddl,7

dldispl:movah,2

int21h

popax

ret

dldispendp

end

3.36解:

如果利用共享變量傳遞函數(shù),且變量定義和使用不在同一個源程序中,需要利用

PUBLIC、EXTERN聲明。

3.37解:

(1)宏定義由一對宏匯編偽指令MACRO和ENDM來完成,格式如下:

宏名MACRO[形參表]

...:宏定義體

ENDM

宏定義之后就可以使用它,即宏調(diào)用:

宏名[實參表]

(2)宏調(diào)用的格式同一般指令一樣:在使用宏指令的位置寫下宏名,后跟實體參數(shù);

如果有多個參數(shù),應(yīng)按形參順序填入實參,也用逗號分隔

(3)宏展開:在匯編時,宏指令被匯編程序用對應(yīng)的代碼序列替代,這就是宏展開

宏展開的具體過程是:當(dāng)匯編程序掃描源程序遇到己有定義的宏調(diào)用時,即用相應(yīng)的

宏定義體完全替代源程序的宏指令,同時用位置匹配的實參對形參進行取代

3.38解:

宏調(diào)用的參數(shù)通過形參、實參結(jié)合實現(xiàn)傳遞,簡捷直觀、靈活多變。宏匯編的一大特

色是它的參數(shù)。宏定義時既可以無參數(shù),也可以有一個或多個參數(shù);宏調(diào)用時實參的形式

也非常靈活,可以是常數(shù)、變量、存儲單元、指令(操作碼)或它們的一部分,也可以是

表達式;只要宏展開后符合匯編語言的語法規(guī)則即可。

3.39解:

宏:僅是源程序級的簡化:宏調(diào)用在匯編時進行程序語句的展開,不需要返回;不減

小目標(biāo)程序,執(zhí)行速度沒有改變

通過形參、實參結(jié)合實現(xiàn)參數(shù)傳遞,簡捷直觀、靈活多變

子程序:還是目標(biāo)程序級的簡化:子程序調(diào)用在執(zhí)行時由CALL指令轉(zhuǎn)向、RET指令返

回;形成的目標(biāo)代碼較短,執(zhí)行速度減慢

需要利用寄存器、存儲單元或堆棧等傳遞參數(shù)

選擇:宏與子程序具有各自的特點,程序員應(yīng)該根據(jù)具體問題選擇使用那種方法。通

常,當(dāng)程序段較短或要求較快執(zhí)行時,應(yīng)選用宏;當(dāng)程序段較長或為減小目標(biāo)代碼時,要

選用子程序

3.40編寫一個宏指令movedoprnd,soprnd,它實現(xiàn)任意尋址方式的字量源操作數(shù)

soprnd送到目的操作數(shù)doprnd,包括存儲單元到存儲單元的傳送功能。

答:

movemacrodoprnd,soprnd

movax,soprnd

movdoprnd,ax

endm

3.41定義一個宏logical,用它代表4條邏輯運算指令:and/or/xor/testo注意需要

利用3個形式參數(shù),并給出一個宏調(diào)用以及對應(yīng)宏展開的例子。

答:

logicalmacroIcode,dopd,sopd

Icodedopd,sopd

endm

例如,如果使用“andax,[bx]”指令,可以利用該宏定義,寫出宏指令如下

logicaland,ax,[bx]

3.42解:

utolmacro

localnext

empal,'A':小于“A”不轉(zhuǎn)換

jbnext

empal,'Z';大于“A”不轉(zhuǎn)換

janext

addal,20h;是大寫字母則轉(zhuǎn)換為小寫字母

next:

endm

3.43定義一個宏movestrstrn,dstr,sstr,它將strn個字符從一個字符區(qū)sstr傳送

到另一個字符區(qū)dstr

解:(假設(shè)它們都在數(shù)據(jù)段)

movestrmacrostrn,dstr,sstr

movex,ds

moves,ex

movex,strn

movdi,offsetdstr

movsi,offsetsstr

cld

repmovsb;;重復(fù)傳送ES:[DI]+DS:[SI]

endm

第四章

4.1

擴展板

20;A19-4;65536;-A);

4.4

總線操作周期中,8088在第三個時鐘周期的前沿測試READY引腳,若無效,表明被訪問

的設(shè)備與CPU操作不同步,CPU插入等待周期。

4.5

最小組態(tài)模式用于小規(guī)模系統(tǒng),MN/MX*接高電平,分時復(fù)用引腳是:AD7-ADa,

當(dāng)MN/MX*接低電平,8088構(gòu)成最大組態(tài)模式,應(yīng)用大規(guī)模應(yīng)用程序。

4.6

引腳三態(tài)能力主要針對引腳輸出信號狀態(tài):高電平、低電平和高阻。輸出高阻意味著芯片

放棄對引腳的控制。這樣它所連接的設(shè)備就可以接管該引腳及連接導(dǎo)線的控制權(quán)。

4.7

RESET:復(fù)位請求,高電平有效時,CPU回到初始狀態(tài)。

HOLD:總線請求,高電平有效時,其他總線主控設(shè)備向CPU申請占用總線。

NMI:不可屏蔽中斷請求。外界向CPU申請不可屏蔽中斷。

INTR:可屏蔽中斷請求。高電平有效時,中斷請求設(shè)備向CPU申請可屏蔽中斷。

4.10

(1)T1周期,CPU進行讀操作。

(2)T2-T4期間,CPU對數(shù)據(jù)總線輸出高阻態(tài),選通存儲器或I/O接口,向CPU傳送數(shù)據(jù)。

(3)T4的下降沿,CPU對數(shù)據(jù)總線采樣。

4.15

三態(tài)透明鎖存器指芯片具有三態(tài)輸出能力。當(dāng)G有效,允許數(shù)據(jù)輸出,否則不允許。當(dāng)?shù)?/p>

址輸出端DE*無效,說明不允許CPU向總線輸出地址。

4.16

數(shù)據(jù)收發(fā)器指向兩個方向驅(qū)動數(shù)據(jù)。74LS245的G*標(biāo)示輸出控制端,DIR標(biāo)示方向控制端。

4.17

(1)8086是真正的16位微處理器。8088的數(shù)據(jù)總線只有8位;

(2)8086指令隊列長度為4字節(jié),8088為6字節(jié);

(3)最小組態(tài)下,8088選擇訪問對象的信號為IO/M*,8086為M/IO*

(4)8086數(shù)據(jù)存儲按照16位數(shù)據(jù)寬度組織,由奇偶兩個對稱的存儲器組織,提高訪問

效率。

第五章

5.1解:

主存的作用:保存正在使用的、處于活動狀態(tài)的程序和數(shù)據(jù)。

輔存的作用:長期保存程序文件和數(shù)據(jù)文件,在需要時將這些文件調(diào)入RAM內(nèi)存并

激活使用。

cache的作用:提高對存儲器的訪問速度。

虛擬存儲:由容量較小的主存和容量較大的輔存構(gòu)成,其目標(biāo)是擴大程序員眼中的

主存容量。

區(qū)別:通過存儲器訪問指令用戶可對主存進行隨機訪問;用戶利用操作系統(tǒng)提供的

用戶命令和功能調(diào)用對輔存進行訪問。

5.2在半導(dǎo)體存儲器中,RAM指的是隨機存取存儲器,他可讀可寫,但斷電后信息一

般會丟失;而ROM指的是只讀存儲器,正常工作時只能從中」赳J信息,但斷電后

信息不會丟失。以EPROM芯片2764為例,其存儲容量為8KX8位,共有父_條數(shù)據(jù)線

和13條地址線。用它組成64KB的ROM存儲區(qū)共需方_片2764芯片。

5.3解:

雙譯碼方式使得地址譯碼器的輸出線的數(shù)目大為減少,使得芯片設(shè)計得時候復(fù)雜度

就低了。

地址線Ag?A。

4根數(shù)據(jù)線I/04-I/0.

片選CS*

讀寫WE*

5.4解:

假想的RAM有12根地址線、4根數(shù)據(jù)線

片選端CS*或CE*:有效時,可以對該芯片進行讀寫操作,通過對系統(tǒng)高位地址線的譯

碼來選中各個存儲芯片

輸出0E*:控制讀操作。有效時,芯片內(nèi)數(shù)據(jù)輸出,該控制端對應(yīng)系統(tǒng)的讀控制線

MEMR*(MRDC*)

寫WE*:控制寫操作。有效時,數(shù)據(jù)進入芯片中,該控制端對應(yīng)系統(tǒng)的寫控制線

MEMW*(MWTC*)

5.5解:

位片結(jié)構(gòu):每個存儲單元具有一個唯一的地址,可存儲1位。(4116)

字片結(jié)構(gòu):每個存儲單元具有一個唯一的地址,可存儲多位。(2114)

5.6解:

組成單元速度集成度應(yīng)用

SRAM觸發(fā)器快低小容量系統(tǒng)

DRAM極間電容慢高大容量系統(tǒng)

NVRAM帶微型電池慢低小容量非易失

掩膜ROM:信息制作在芯片中,不可更改

PROM:允許一次編程,此后不可更改

EPROM:用紫外光擦除,擦除后可編程;并允許用戶多次擦除和編程

EEPROM(E2PROM):采用加電方法在線進行擦除和編程,也可多次擦寫

FlashMemory(閃存):能夠快速擦寫的EEPROM,但只能按塊(Block)擦除

5.7解:

位擴充一一存儲器芯片數(shù)據(jù)位數(shù)小于主機數(shù)據(jù)線數(shù)時,利用多個存儲器芯片在數(shù)據(jù)

“位”方向的擴充;

地址擴充(字?jǐn)U充)一一當(dāng)一個存儲器芯片不能滿足系統(tǒng)存儲容量時,利用多個存

儲器芯片在“地址”方向的擴充

組成32KB存儲空間,用SRAM2114(1KX4)需要64個芯片;

組成32KB存儲空間,用DRAM4116(16KX1)需要16個芯片;

它們都需要進行位擴充和地址擴充

5.8解:

片選信號說明該存儲器芯片是否被選中正常工作,設(shè)置它可以比較方便地實現(xiàn)多個

存儲器芯片組成大容量的存儲空間

存儲器片選信號通常與CPU地址總線的高位地址線相關(guān)聯(lián),可以采用“全譯碼”、

“部分譯碼”、“線選譯碼”方式

采用全譯碼方式可以避免地址重復(fù)

采用部分或線選譯碼可以節(jié)省譯碼硬件

5.9解:

24=16

5.10解:

心片tx一個可用地址重熨地址

(右)2000?3FFFH42000?43FFFH

Yl*82000-83FFFH

6264C2000?C3FFFII

5.11解:

A|「AJ6Ag?AsA[尸A。地址

10100000全0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論