微型計(jì)算機(jī)系統(tǒng)概述_第1頁
微型計(jì)算機(jī)系統(tǒng)概述_第2頁
微型計(jì)算機(jī)系統(tǒng)概述_第3頁
微型計(jì)算機(jī)系統(tǒng)概述_第4頁
微型計(jì)算機(jī)系統(tǒng)概述_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1章微型計(jì)算機(jī)系統(tǒng)概述

1.簡(jiǎn)述微型計(jì)算機(jī)系統(tǒng)的組成。

2.簡(jiǎn)述計(jì)算機(jī)軟件的分類及操作系統(tǒng)的作用。

3.CPU是什么?寫出Intel微處理器的家族成員。

4.寫出10條以上常用的DOS操作命令。

[參考答案]

1.答:微型計(jì)算機(jī)系統(tǒng)由硬件和軟件兩大部分組成,硬件又可細(xì)分為主機(jī)(由

CPU、存儲(chǔ)器、控制電路、接口等構(gòu)成)、輸入設(shè)備(如鍵盤)和輸出設(shè)備(如

顯示器);軟件可細(xì)分為系統(tǒng)軟件(如操作系統(tǒng))和應(yīng)用軟件。

3.答CPU(CentralProcessingUnit中央處理單元)是計(jì)算機(jī)的核心部件,它

包括控制器和算術(shù)邏輯運(yùn)算部件等。Intel微處理器的家族成員有:8088/8086.

80186^80286、80386、80486、Pentium(80586)>PentiumII、PentiumIII和

PentiumIVO

第2章計(jì)算機(jī)中的數(shù)制和碼制

i.將下列十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù):

(1)49;(2)73.8125;(3)79.75

2.將二進(jìn)制數(shù)變換成十六進(jìn)制數(shù):

(1)101101B;(2)1101001011B;(3)1111111111111101B;

(4)100000010101B;(5)1111111B;(6)10000000001B

3.將十六進(jìn)制數(shù)變換成二進(jìn)制數(shù)和十進(jìn)制數(shù):

(1)FAH;(2)5BH;(3)78A1H;(4)FFFFH;(5)34.2AH;(6)B8.93H

4.將下列十進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù):

(1)39;(2)299.34375;(3)54.5625

5.將下列二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù):

(1)10110.101B;(2)10010010.001B;(3)11010.1101B

6.計(jì)算(按原進(jìn)制運(yùn)算):

(1)10001101B+11010B;(2)10111B+11100101B;(3)1011110B-1110B;

(4)124AH+78FH;(5)5673H+123H;(6)1000H-F5CH;

7.已知a=1011B,b=11001B,c=100110B,按二進(jìn)制完成下列運(yùn)算,并用十進(jìn)制運(yùn)

算檢查計(jì)算結(jié)果:

(1)a+b;(2)c-a-b;(3)a,b;(4)c/b

8.已知a=00111000B,b=11000111B,計(jì)算下列邏輯運(yùn)算:

(1)aANDb;(2)aORb;(3)aXORb;(4)NOTa

9.設(shè)機(jī)器字長(zhǎng)為8位,寫出下列各數(shù)的原碼和補(bǔ)碼:

(1)+1010101B;(2)-1010101B;(3)+1111111B;

(4)-1111111B;(5)+1000000B;(6)-1000000B

10.寫出下列十進(jìn)制數(shù)的二進(jìn)制補(bǔ)碼表示(設(shè)機(jī)器字長(zhǎng)為8位):

(1)15;(2)-1;(3)117;(4)0;

(4)-15;(5)127;(6)-128;(7)80

11.設(shè)機(jī)器字長(zhǎng)為8位,先將下列各數(shù)表示成二進(jìn)制補(bǔ)碼,然后按補(bǔ)碼進(jìn)行運(yùn)算,

并用十進(jìn)制數(shù)運(yùn)算進(jìn)行檢驗(yàn):

(1)87-73;(2)87+(-73);(3)87-(-73);

(4)(-87)+73;(5)(-87)-73;(6)(-87)一(-73);

12.已知a,b,c,d為二進(jìn)制補(bǔ)碼:a=00110010B,b=01001010B,c=11101001B,

d=10111010B,計(jì)算:

(1)a+b;(2)a+c;(3)c+b;(4)c+d;

(5)a-b;(6)c-a;(7)d-c;(8)a+d-c

13.設(shè)下列四組為8位二進(jìn)制補(bǔ)碼表示的十六進(jìn)制數(shù),計(jì)算a+b和a-b,并判斷

其結(jié)果是否溢出:

(1)a=37H,b=57H;(2)a=0B7H,b=0D7H;

(3)a=0F7H,b=0D7H;(4)a=37H,b=0C7H

14.求下列組合BCD數(shù)的二進(jìn)制和十六進(jìn)制表示形式:

(1)3251(2)12907(3)ABCD(4)abed

15.將下列算式中的十進(jìn)制數(shù)表示成組合BCD碼進(jìn)行運(yùn)算,并用加6/減6修正

其結(jié)果:

(1)38+42;(2)56+77;(3)99+88;(4)34+69;

(5)38-42;(6)77-56;(7)15-76;(8)89-23

16.將下列字符串表示成相應(yīng)的ASCII碼(用十六進(jìn)制數(shù)表示):

(1)Example1;(2)JinanUniversity;(3)-108.652;

(4)Howareyou?;(5)Computer(6)InternetWeb

17.將下列字符串表示成相應(yīng)的ASCH碼(用十六進(jìn)制數(shù)表示):

(1)Hello(2)123<CR>456;(注:<CR>表示回車)(3)ASCII;

(4)Thenumberis2315

[參考答案]

1.解:(1)49=00110001B(2)73.8125=01001001.1101B

(3)79.75=01001111.11B

3.解:(1)FAH=11111010B=250D(2)5BH=01011011B=91D

(3)78A1H=O111100010100001B=30881D

(4)FFFFH=1111111111111111B=65535D

5.解:(1)10110.101B=22.625(2)10010010.001B=146.0625

(3)11010.1101B=26.8125

7.解:a=1011B=ll,b=11001B=25,c=100110B=38

(1)a+b=100100B=36(2)c-a-b=10B=2

(3)a?b=100010011B=275(4)c/b=l...1101B(=13)

9.解:(1)+1010101B原碼01010101B補(bǔ)碼01010101B

(2)-1010101B原碼11010101B補(bǔ)碼10101011B

(3)+1111111B原碼01111111B補(bǔ)碼0111111IB

(4)-1111111B原碼11111H1B補(bǔ)碼10000001B

(5)+1000000B原碼01000000B補(bǔ)碼01000000B

(6)-1000000B原碼11000000B補(bǔ)碼11000000B

11.解:按補(bǔ)碼表示+87=0101(HUB;+73=01001001B;-87=10101001B;

-73=10110111B

(1)87-73=01010111B-01001001B=1110B=14

(2)87+(-73)=01010111B+10110111B=[l]00001110B=14(舍去進(jìn)位)

(3)87-(-73)=01010111B-10110111B=[-1]10100000B=-96(溢出)

(4)(-87)+73=10101001B+01001001B=llll0010B=-14

(5)(-87)-73=10101001B-01001001B=[-l]01100000B=96(溢出)

(6)(-87)-(-73)=10101001B-10110111B=llll0010B=-14

13.解:(1)a=37H,b=57H;a+b=8EH;a-b=[-l]E0H=-32

(2)a=0B7H,b=0D7H;a+b=[l]8EH=-114;a-b=[-l]E0H=-32

(3)a=0F7H,b=0D7H;a+b=[l]CEH=-50;a-b=20H=32

(4)a=37H,b=0C7H;a+b=FEH=-2;a-b=[-l]70H=112

15.解:(1)將38、42表示成組合BCD碼:38H、42H,然后按二進(jìn)制進(jìn)行運(yùn)算,

并根據(jù)運(yùn)算過程中的AF,CF進(jìn)行加6/減6修正。38H+42H=7AH,低4位需要

加6修正:7AH+6=80H,所以有38+42=80;

(2)56H+77H=CDH,高4位、低4位都應(yīng)加6修正:CDH+66H=[1位都,因此

有56+77=133;

(3)99H+88H=[1]21H(AF=1),高4位、低4位都應(yīng)加6修正:

[1]21H+66H=[1]87H,因此99+88=187

(4)34H+69H=9DH,低4位需要加6修正:9DH+6=A3H,修正結(jié)果使高4位超出

9,這時(shí)再對(duì)高4位進(jìn)行加6修正:A3H+60H=[l]03H,因此34+69=103

(5)38H-42H=[-1]F6H,因CF=1(有借位),高4位應(yīng)減6修正:

[T]F6H-60H=[T]96H,指令的借位應(yīng)表示成100的補(bǔ)碼,因此

38-42=96-100=-4

(6)77H-56H=21H,不需要修正,因此77-56=21

(7)15H-76H=[-1]9FH,高4位、低4位都應(yīng)減6修正:[-1]9FH-66H=[-1]39H,

因此15-76=39-100=-61

(8)89H-23H=66H,不需要修正,因此89-23=66

17.解:字符串的ASCH碼(用十六進(jìn)制數(shù)表示)為:

(1)48,65,6C,6C,6F

(2)31,32,33,0D,34,35,36

(3)41,53,43,49,49

(4)54,68,65,20,6E,75,6D,62,65,72,20,69,73,20,32,33,

31,35

第3章微機(jī)系統(tǒng)中的微處理器

3.1例題

例3-1有一塊120個(gè)字的存儲(chǔ)區(qū)域,其起始地址為625A:234D,寫出這個(gè)存儲(chǔ)區(qū)域

首末單元的物理地址。

解:存儲(chǔ)區(qū)域的字節(jié)數(shù)為:2X120=240=0F0H,

首地址為:625AHX10H+234DH=648EDH,

末地址為:648EDH+0F0H=649DDH,

或者:625AHX10H+(234DH+0E0H)=625A0H+243DH=649DDH?

例3-2兩個(gè)十六進(jìn)制數(shù)7825H和5A1FH分別相加和相減后,求運(yùn)算結(jié)果及各標(biāo)志位的

值。

解:7825H+5A1FH=OD244H,AF=1,CF=0,ZF=0,SF=1,OF=1(當(dāng)將7825H和5A1FH

看作有符號(hào)數(shù)時(shí),兩個(gè)正數(shù)相加得到一個(gè)負(fù)數(shù),結(jié)果顯然是錯(cuò)誤的,實(shí)際上,在運(yùn)算過程中,

次高位產(chǎn)生了進(jìn)位而最高位沒有產(chǎn)生進(jìn)位,故運(yùn)算產(chǎn)生溢出),PF=1(因?yàn)樵?4H中包含

有偶數(shù)個(gè)1)。

7825H-5A1FH=1EO6H,AF=1,CF=0,ZF=0,SF=0,0F=0,PF=h

5A1FH—7825H=OE1FAH,AF=0,CF=1,ZF=0,SF=1,0F=0,PF=1。

3.2習(xí)題

1.微處理器內(nèi)部結(jié)構(gòu)由哪兒部分組成?闡述各部分的主要功能。

2.微處理器級(jí)總線有哪幾類?各類總線有什么作用?

3.為什么地址總線是單向的,而數(shù)據(jù)總線是雙向的?

4.8086/8088微處理器內(nèi)部有哪些寄存器?其主要作用是什么?

5.如果某微處理器有20條地址總線和16條數(shù)據(jù)總線:

(1)假定存儲(chǔ)器地址空間與I/O地址空間是分開的,則存儲(chǔ)器地址空間有多大?

(2)數(shù)據(jù)總線上傳送的有符號(hào)整數(shù)的范圍有多大?

6.將十六進(jìn)制數(shù)62A0H與下列各數(shù)相加,求出其結(jié)果及標(biāo)志位CF、AF、SF、ZF、0F和

PF的值:

(1)1234H;(2)4321H;(3)CFAOII;(4)9D601I

7.從下列各數(shù)中減去4AE0H,求出其結(jié)果及標(biāo)志位CF、AF、SF、ZF、0F和PF的值:

(1)1234H;(2)5D90H;(3)9090H;(4)EA04H

8.什么是邏輯地址?什么是物理地址?它們之間的關(guān)系如何?

9.寫出下列存儲(chǔ)器地址的段地址、偏移地址和物理地址:

(1)2134:10A0;(2)1FA0:0A1F;(3)267A:B876

10.給定一個(gè)數(shù)據(jù)的有效地址為2359H,并且(DS)=490BH,求該數(shù)據(jù)的物理地址。

11.如果在一個(gè)程序段開始執(zhí)行之前,(CS)=0A7F0H,(IP)=2B40H,求該程序段的第

一個(gè)字的物理地址。

12.下列操作可使用哪些寄存器?

(1)加法和減法;(2)循環(huán)計(jì)數(shù);(3)乘法和除法;(4)保存段地址;

(5)表示運(yùn)算結(jié)果的特征;(6)指令地址;(7)從堆棧中取數(shù)的地址;

13.IBMPC有哪些寄存器可用來指示存儲(chǔ)器的地址?

14.設(shè)(BX)=637DH,(SI)=2A9BH,位移量=0C237H,(DS)=3100H,求下列尋址方

式產(chǎn)生的有效地址和物理地址:

(1)直接尋址;(2)用BX的寄存器間接尋址;(3)用BX的寄存器相對(duì)尋址;

(4)用BX和SI的基址變址尋址;(5)用BX和SI的基址變址且相對(duì)尋址

15.若(CS)=5200H時(shí),物理轉(zhuǎn)移地址為5A238H,那么(CS)變成7800H時(shí),物理轉(zhuǎn)移

地址為多少?

16.設(shè)(CS)=0200H,(IP)=2BC0H,位移量=5119H,(BX)=1200H,(DS)=212AH,

(224A0H)=060011,(275B9H)=098AIlo求使用下列尋址方式時(shí)的轉(zhuǎn)移地址:

(1)段內(nèi)直接尋址方式;

(2)使用BX的寄存器尋址的段內(nèi)間接尋址方式;

(3)使用BX的寄存器相對(duì)尋址的段內(nèi)間接尋址方式;

17.將下列兩組的詞匯和說明關(guān)聯(lián)起來:

(1)CPU;A.保存當(dāng)前棧頂?shù)刂返募拇嫫鳎?/p>

(2)EU;B.指示下一條要執(zhí)行指令的地址;

(3)BIU;C.總線接口部件,實(shí)現(xiàn)執(zhí)行部件所需要的所有總線操作;

(4)IP;D.分析并控制指令執(zhí)行的部件;

(5)SP;E.存儲(chǔ)程序、數(shù)據(jù)等信息的記憶裝置,PC機(jī)有RAM和ROM

兩種;

(6)存儲(chǔ)器;F.以后進(jìn)先出方式工作的存儲(chǔ)器空間:

(7)堆棧:G.把匯編語言程序翻譯成機(jī)器語言程序的系統(tǒng)程序;

(8)指令;H.惟一代表存儲(chǔ)器空間中的每個(gè)字節(jié)單元的地址:

(9)狀態(tài)標(biāo)志;I.能被計(jì)算機(jī)直接識(shí)別的語言;

(10)控制標(biāo)志;J.用指令的助記符、符號(hào)地址、標(biāo)號(hào)等符號(hào)書寫程序的語

言;

(11)段寄存器;K.把若干個(gè)模塊連接起來成為可執(zhí)行文件的系統(tǒng)程序;

(12)物理地址;L.保存各邏輯段的起始地址的寄存器;

(13)匯編語言;M.控制操作的標(biāo)志,PC機(jī)有三位:DF、IF、TF;

(14)機(jī)器語言;N.記錄指令操作結(jié)果的標(biāo)志,PC機(jī)有六位:OF、SF、ZF、

AF、PF、CF;

(15)匯編程序;0.執(zhí)行部件,由算術(shù)邏輯單元(ALU)和寄存器組等組成;

(16)連接程序;P.由匯編程序在匯編過程中執(zhí)行的指令;

(17)目標(biāo)碼;Q.告訴CPU要執(zhí)行的操作,在程序運(yùn)行時(shí)執(zhí)行;

(18)偽指令R.機(jī)器語言代碼。

[參考答案]

1.答:微處理器內(nèi)部結(jié)構(gòu)主要由算術(shù)邏輯運(yùn)算單元(ALU)、控制器、工作寄存器和I/O

控制邏輯組成。算術(shù)邏輯運(yùn)算單元是CPU的核心,它完成所有的運(yùn)算操作;控制器是CPU

的“指揮中心”,只有在它的控制下,CPU才能完成指令的讀入、寄存、譯碼和執(zhí)行;

工作寄存器用于暫時(shí)存儲(chǔ)尋址信息和計(jì)算中間結(jié)果;I/O控制邏輯用于處理I/O操作。

3.答:由于在計(jì)算機(jī)中地址總是由CPU產(chǎn)生的,因此地址總線是單向的。而數(shù)據(jù)可從CPU

寫到存儲(chǔ)器,也可從存儲(chǔ)器讀到CPU,因此數(shù)據(jù)總線是雙向的。

5.解:存儲(chǔ)空間為2”=1048576=1M字節(jié),數(shù)據(jù)總線上傳送的有符號(hào)整數(shù)的范圍為

一32768?+32767。

7.解:(1)1234H-4AE0H=C754H;CF=1,AF=0,SF=1,ZF=0,0F=0,PF=0

(2)5D90H-4AE0H-12B0H;CF=0,AF=0,SF=0,ZF=0,0F=0,PF=0

(3)9090H-4AE0H=45B0H;CF=0,AF=0,SF=0,ZF=0,0F=0,PF=0

(4)EAO4H—4AE0H=9F24H;CF=O,AF=O,SF=1,ZF=O,0F=0,PF=1

9.解:(1)段地址:213411;偏移地址:10A0H;物理地址:223E0I1

(2)段地址:1FA0H;偏移地址:0A1FH;物理地址:2041FH

(3)段地址:267AII;偏移地址:B876H;物理地址:32016H

11.解:物理地址為:0A7F0HX10H+2B40H=A3330Ho

13.答:指示存儲(chǔ)器地址的寄存器有:SI,DI,BX,BP

15.解:偏移地址為5A238H—5200HX10H=8238H,因此當(dāng)(CS)變成7800H時(shí),物理轉(zhuǎn)

移地址為7800HX10H+8238H=80238H

17.答:兩組詞匯和說明的關(guān)聯(lián)關(guān)系為

(1)?0;(2)?D;(3)?C;(4)?B;(5)?A;(6)?E;

(7)?F;(8)?Q;(9)?N;(10)?M;(11)?L;(12)?H;

(13)?J;(14)-I;(15)?G;(16)?K;(17)?R;(18)?P。

第4章匯編語言程序設(shè)計(jì)基本方法

4.1例題

例4-1寫出下列變量的內(nèi)容:

VARIDB125,125/3,-1,-10H

VAR2DW125,125/3,-1,-10H

VAR3DB'AB','CD'

VAR4DW'AB','CD'

解:按卜六進(jìn)制數(shù)依次寫出各個(gè)變量的內(nèi)容為:

VARI:7D,29,FF,F0

VAR2:007D,0029,FFFF,FFF0

VAR3:41,42,43,44

VAR4:4142,4344

按內(nèi)存存儲(chǔ)順序給出:

7D,29,FF,F0,7D,00,29,00,FF,FF,F0,FF,41,42,43,44,42,41,44,43

例4.2設(shè)有下列偽指令:

STARTDB1,2,3,4,'ABCD'

DB3DUP(?,1)

BUFDB10DUP(?),15

LEQUBUF-START

求L的值。

解:由EQU偽指令知,L的值為BUF的偏移地址減去START的偏移地址,而變量START

共占用8個(gè)字節(jié),第2行定義的變量(無變量名)共占用6個(gè)字節(jié),因此,L的值為8+6

=14=0EH。

例4.3在緩沖區(qū)DATABUF中保存有一組無符號(hào)數(shù)據(jù)(8位),其數(shù)據(jù)個(gè)數(shù)存放在DATABUF

的第1、2個(gè)字節(jié)中,要求編寫程序?qū)?shù)據(jù)按遞增順序排列。(與教材p.U4例4.3.10類

似,但方法不同)

解:這里采用雙重循環(huán)實(shí)現(xiàn)數(shù)據(jù)的排序,這可使程序變得簡(jiǎn)單。

N=100;設(shè)有100個(gè)數(shù)據(jù)

STACKSEGMENTSTACK'STACK'

DW10011DUP(?)

TOPLABEI.WORD

STACKENDS

DATASEGMENT

DATABUFDWN

DBNDUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAX,STACK

MOVSS,AX

LEASP,TOP

;取出隨機(jī)數(shù)據(jù)

MOVCX,DATABUF

LEASI,DATABUF4-2

MOVBL,23

MOVAL,11

LP:

MOV[SI],AL

INCSI

ADDAL,BL

LOOPLP

;數(shù)據(jù)排序

MOVCX,DATABUF

DECCX

LEASLDATABUF+2

ADDSI.CX

LP1:

PUSHCX

PUSHSI

LP2:

MOVAL,[SI]

CMPAL,[SI-1]

JAENOXCHG

XCHGAL,[SI-1]

MOV[SI],AL

NOXCHG:

DECSI

LOOPLP2

POPSI

POPCX

LOOPLP1

;數(shù)據(jù)排序結(jié)束

MOVAH,4CH;返回DOS

MOVAL,0

INT21H

CODEENDS

ENDSTART

例4-4有一組數(shù)據(jù)(16位而進(jìn)制數(shù))存放在緩沖區(qū)BUF1中,數(shù)據(jù)個(gè)數(shù)保存在BUF1的

頭兩個(gè)字節(jié)中。要求編寫程序?qū)崿F(xiàn)在緩沖區(qū)中查找某一數(shù)據(jù),如果緩沖區(qū)中沒有該數(shù)據(jù),

則將它插入到緩沖區(qū)的最后;如果緩沖區(qū)中有多個(gè)被查找的數(shù)據(jù),則只保留第一個(gè),將其

余的刪除。

解:在緩沖區(qū)BUF中搜索指定的數(shù)據(jù),當(dāng)沒有找到時(shí),插入該數(shù)據(jù);當(dāng)找到時(shí),進(jìn)入

搜索多余的重復(fù)數(shù)據(jù),每找到一個(gè)就刪除它(將緩沖區(qū)的剩余數(shù)據(jù)向前移動(dòng)一個(gè)字)。當(dāng)

然應(yīng)注意更新緩沖區(qū)的長(zhǎng)度單元。

STACKSEGMENTSTACK'STACK'

DW100HDUP(?)

TOPLABELWORD

STACKENDS

:設(shè)緩沖區(qū)原有10個(gè)字,指定的數(shù)據(jù)為(NEW)=56AAH

DATASEGMENT

BUFDW10

DW1000H,0025H,6730H,6758H,7344H,2023H,0025H,6745H,10A7H,0B612H

DW10DUP(?)

NEWDW56AAH

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAX,STACK

MOVSS,AX

LEASP,TOP;搜索指定的數(shù)據(jù)

MOVCX,BUF

LEASLBUF+2

MOVAX,NEW

LI:

CMPAX,[SI]

JZL2

......INCSI

INCSI

LOOPLI:沒有找到,則插入數(shù)據(jù)

MOV[SI],AX

INCBUF

JMPOK;找到后,在剩余部分搜索重復(fù)的數(shù)據(jù)

L2:

DECCX

INCSI

INCSI

L3:

CMPAX,[SI]

JZL4

INCSI

INCSI

LOOPL3

JMPOK;找到一個(gè)重復(fù)數(shù)據(jù),則刪除它

L4:

PUSHSI

DECCX

PUSHCX

MOVDI,SI

INCSI

INCSI

CLD

REPMOVSW

DECBUF

POPCX

POPSI

JMPL3;刪除后,返回繼續(xù)搜索重復(fù)的數(shù)據(jù)

0K:

MOVAH,4CH;返回DOS

MOVAL,0

INT21H

CODEENDS

ENDSTART

例4.5在緩沖區(qū)DAT1和DAT2中,存放著兩組遞增有序的8位二進(jìn)制無符號(hào)數(shù),其

中前兩個(gè)字節(jié)保存數(shù)組的長(zhǎng)度,要求編程實(shí)現(xiàn)將它們合并成一組遞增有序的數(shù)據(jù)DAT,DAT

的前兩個(gè)字節(jié)仍用于保存數(shù)組長(zhǎng)度。

解:這里要用到3個(gè)指針的使用。對(duì)于寫指針首選使用DI,兩個(gè)讀指針可采用SI和

BX,分別指示DAT1和DAT2。這樣可適時(shí)使用字符串指令,以簡(jiǎn)化程序設(shè)計(jì)。

在設(shè)計(jì)中,將用BX指示的緩沖區(qū)DAT2內(nèi)容讀入AL,這樣,當(dāng)要將DAT1的內(nèi)容傳送到

DAT時(shí),可采用MOVSB指令;當(dāng)要將DAT2的內(nèi)容傳送到DAT時(shí),可采用STOSB指令。

STACKSEGMENTSTACK'STACK'

DW100HDUP(?)

TOPLABELWORD

STACKENDS;設(shè)DAT1中有10個(gè)數(shù)據(jù),DAT2中有13個(gè)數(shù)據(jù)

DATASEGMENT

DAT1DW10

DB10H,25H,67H,68H,73H,83H,95H,0A8H,0C2H,0E6H

DAT2DW13

DB05,12H,26H,45H,58H,65H,67H,70H,76H,88H,92H,OCDH,ODEH

DATDW?

DB200DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAX,STACK

MOVSS,AX

LEASP,TOP

MOVCX,DAT1

MOVDX,DAT2

MOVDAT,CX

ADDDAT,DX

LEASI,DAT1+2

LEABX,DAT2+2

LEADI,DAT+2

CLD

LI:

MOVAL,[BX]

INCBX

L2:

CMPAL,[SI]

JBL3

MOVSB;DAT1區(qū)中的數(shù)據(jù)傳送到DAT|x

DECCX

JZL4

JMPL2

L3:

STOSB;DAT2區(qū)中的數(shù)據(jù)傳送到DAT區(qū)

DECDX

JZL5

JMPLI

L4:

MOVSI,BX

DECSI

MOVCX,DX

L5:

REPMOVSB

MOVAH,4CH;返回DOS

MOVAL,0

INT21H

CODEENDS

ENDSTART

例4.6已知緩沖區(qū)BUFA內(nèi)有20個(gè)互不相等的整數(shù)(其序號(hào)從0到19),緩沖區(qū)BUFB

內(nèi)有30個(gè)互不相等的整數(shù)(其序號(hào)從。到29)o編寫程序完成:將既在BUFA中出現(xiàn)又在

BUFB中出現(xiàn)的整數(shù)(設(shè)為x)存放在緩沖區(qū)BUFC中,并將x在BUFA和BUFB中的序號(hào)分別

存放于緩沖區(qū)BUFCA和BUFCB中。

解:這里需要5個(gè)指針,但BUFC、BUFCA和BUFCB為同步操作,只需要一個(gè)指針,尋址

方式為寄存器相對(duì)尋址,即(設(shè)AL為找到的值,DL、BL為序號(hào))

MOVBUFC[DI],AL

MOVBUFCA[DI],DL

MOVBUFCB[DI],BL;對(duì)序號(hào)也應(yīng)小心處理,我們采用寄存器相對(duì)尋址,例如MOVAL,

BUFA[SI],其中SI即為序號(hào)。

STACKSEGMENTSTACK'STACK'

DW100HDUP(?)

TOPLABELWORD

STACKENDS

Nl=20

N2=30

DATASEGMENT

BUFADB1011,25H,67H,26H,68H,73H,83H,58H,0,06H,12H,OCDH,95H

DB0A8H,0C2H,48H,0E6H,0F1H,1AH,0F5H

BUFBDB05,12H,26H,45H,53H,60H,6AH,7FH,76H,88H,92H,OCHI,ODEH,0E1H,0F5H

DB09,17H,23H,48H,58H,65H,67H,70H,7CH,82H,96H,OCDH,0D1H,0E1H,OFEH

BUFCDB20DUP(?)

BUFCADB20DUP(?)

BUFCBDB20DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAX,STACK

MOVSS,AX

LEASP,TOP

;以BUFA為外循環(huán),每個(gè)字節(jié)與BUFB的所有字節(jié)比較(構(gòu)成內(nèi)循環(huán)),

:以確定是否存在相同的值。

MOVCX,N1

XORSI,SI

XORDI,DI

LI:

MOVAL,BUFA[SI]

PUSHCX

MOVCX,N2

XORBX,BX

L2:

CMPAL,BUFBtBX]

JZL3

INCBX

LOOPL2

JMPL4

;找到相同的值后,進(jìn)行值傳送和序號(hào)保存。

L3:

MOVBUFC[DI],AL

MOVDX,SI

MOVBUFCA[DI],DL

MOVBUFCB[DI],BL

INCDI

L4:

POPCX

INCSI

LOOPLI

MOVAH,4CH;返回DOS

MOVAL,0

INT21H

CODEENDS

ENDSTART

4.2習(xí)題

1.寫出完成下列要求的變量定義語句:

(1)在變量varl中保存6個(gè)字變量:4512H,4512,-1,100/3,10H,65530;

(2)在變量var2中保存字符串:'BYTE','word','WORD';

(3)在緩沖區(qū)bufl中留出100個(gè)字節(jié)的存儲(chǔ)空間;

(4)在緩沖區(qū)buf2中,保存5個(gè)字節(jié)的55H,再保存10個(gè)字節(jié)的240,并將這一過程

重復(fù)7次:

(5)在變量var3中保存緩沖區(qū)bufl的長(zhǎng)度;

(6)在變量pointer中保存變量varl和緩沖區(qū)bufl的偏移地址。

2.設(shè)變量varl的邏輯地址為0100:0000,畫出下列語句定義的變量的存儲(chǔ)分配圖:

varlDB12,-12,20/6,4DUP(0,55H)

var2DB'Assemble'

var3DW'AB','cd','E'

var4DWvar2

var5DDvar2

3.指令正誤判斷,對(duì)正確指令寫出源和目的操作數(shù)的尋址方式,對(duì)錯(cuò)誤指令指出原

因(設(shè)VARI,VAR2為字變量,L1為標(biāo)號(hào)):

(1)MOVSI,100(2)MOVBX,VARI[SI]

(3)MOVAX,[BX](4)MOVAL,[DX]

(5)MOVBP,AL(6)MOVVARI,VAR2

(7)MOVCS,AX(8)MOVDS,0100H

(9)MOV[BX][SI],1(10)MOVAX,VAR1+VAR2

(11)ADDAX,LENGTHVARI(12)ORBL,TYPEVAR2

(13)SUB[DI],78H(14)MOVSVARI,VAR2

(15)PUSH100H(16)POPCS

(17)XCHGAX,ES(18)MOVDS,CS

(19)JMPLl+5(20)DIVAX,10

(21)SHLBL,2(22)MOVAL,15+23

(23)MULCX(24)XCHGCL,[SI]

(25)ADCCS:[0100],AH(26)SBBVARI-5,154

4.說明卜列指令對(duì)的區(qū)別:

(1)MOVAX,VARI與MOVAX,OFFSETVARI

(2)MOVAX,VAR2與LEAAX,VAR2

(3)MOVAL,LENGTHVARI與MOVAL,SIZEVARI

(4)MOVAL,ES:[DI]CMPAL,[SI]

與CMPSB

(5)SHRAL,1與SARAL,1

(6)SHRAL,1與RORAL,1

(7)ROLBX,1與RCLBX,1

5.寫出下列轉(zhuǎn)移指令的尋址方式(設(shè)L1為標(biāo)號(hào),VAR1為字型變量,DVAR1為雙字型

變量):

(1)JMPL1(2)JMPNEARL1

(3)JNZL1(4)JMPBX

(5)JGL1(6)JMPVARI[SI]

(7)JMPFARPTRLI(8)JMPDVAR1

6.設(shè)(DS)=200011,(BX)=0100H,(SI)=000211,(20100)=341211,(20102)

=7856H,(21200)=4C2AH,(21202)=65B7H,求下列指令執(zhí)行后AX寄存器的內(nèi)容:

(1)MOVAX,1200II;(2)MOVAX,BX;(3)MOVAX,[1200H];

(4)MOVAX,[BX];(5)MOVAX,1100[BX];(6)MOVAX,[BX][SI];

(7)MOVAX,1100[BX][SI]

7.執(zhí)行下列指令后,DX寄存器中的內(nèi)容是多少?

TABLEDW25,36,-1,-16,10000,13

PYLDW7

MOVBX,OFFSETTABLE

ADDBX,PYL

MOVDX,[BX]

8.如果堆棧的起始地址為2200:0000,棧底為0100H,(SP)=00A8H,求

(1)棧頂?shù)刂罚?/p>

(2)SS的內(nèi)容;

(3)再存入數(shù)據(jù)5678H,3AF2H后,SP的內(nèi)容。

9.設(shè)已用偽指令EQU定義了4個(gè)標(biāo)識(shí)符:

N1EQU2100

N2EQU10

N3EQU20000

N4EQU25000

下列指令是否正確?并說明原因。

(1)ADDAL,N1-N2;(2)MOVAX,N3+N4;

(3)SUBBX,N4-N3;(4)SUBAH,N4-N3-N1

(5)ADDAL,N2;(6)MOVAH,N2*N2

10.按下列要求寫出指令:

(1)將AX寄存器的低4位清零,其余位不變;

(2)將BX寄存器的低4位置1,其余位不變;

(3)將AL寄存器的低4位保持不變,高4位取反;

(4)測(cè)試BX中的位1和位2,當(dāng)這兩位同時(shí)為0時(shí)將AL置OFFH,否則AL清零;

(5)測(cè)試BX中的位1和位2,當(dāng)這兩位有一位為0時(shí)將AL置OFFH,否則AL清零;

(6)將AL中保存的字母ASCII碼變換成相應(yīng)的大寫字母的ASCH碼;

(7)將AL中保存的字母ASCII碼變換成相應(yīng)的小寫字母的ASCII碼;

(8)將AX中的各位取反;

(9)將DX中的低7位取反,高9位不變;

(10)將CX中的低8位與高8位互換。

11.寫出完成下述功能的程序段:

(1)傳送40H到AL寄存器;

(2)將AL的內(nèi)容乘以2;

(3)傳送16H到AH寄存器;

(4)AL的內(nèi)容加上All的內(nèi)容。

計(jì)算最后結(jié)果(AL)=?

12.寫出完成下述功能的程序段:

(1)從緩沖區(qū)BUF的0004偏移地址處傳送一個(gè)字到AX寄存器;

(2)將AX寄存器的內(nèi)容右移2位;

(3)將AX內(nèi)容與BUF的0006偏移地址處的一個(gè)字相乘;

(4)相乘結(jié)果存入BUF的0020H偏移地址處(低位在前)。

13.設(shè)(BX)=110010118,變量VAR的內(nèi)容為00110010B,求下列指令單獨(dú)執(zhí)行后BX

的內(nèi)容:

(1)XORBX,VAR;(2)ANDBX,VAR;

(3)ORBX,VAR;(4)XORBX,11110000B;

(5)ANDBX,0000111IB:(6)TESTBX,1,

14.設(shè)(DX)=10111011B,(CL)=3,(CF)=1,求下列指令單獨(dú)執(zhí)行后DX的內(nèi)

容:

(1)SHRDX,1(2)SARDX,CL;(3)SULDX,CL;

(4)SHLDX,1(5)RORDX,CL;(6)ROLDL,CL;

(7)SALDH,1(8)RCLDX,CL;(9)RCRDL,1

15.選擇題(各小題只有一個(gè)正確答案)

(1)執(zhí)行下列三條指令后:

MOVSP,1000H

PUSHAX

CALLBX

a.(SP)=100011;b.(SP)=OFFEH;

c.(SP)=1004H;d.(SP)=OFFCH;

(2)要檢查寄存器AL中的內(nèi)容是否與AH相同,應(yīng)使用的指令為:

a.ANDAL,AHb.ORAL,AH

c.XORAL,AHd.SBBAL,AH

(3)指令JMPNEARPTRLI與CALLLI(LI為標(biāo)號(hào))的區(qū)別在于:

a.尋址方式不同;b.是否保存IP的內(nèi)容;

c.目的地址不同;d.對(duì)標(biāo)志位的影響不同。

16.寄存器DX:AX組成32位數(shù),DX為高位,編寫程序段實(shí)現(xiàn):

(1)DX:AX右移3位,并將移出的低3位保存在CL中;

(2)DX:AX左移3位,并將移出的高3位保存在CL中;

17.已知在BUF的起始處保存有N個(gè)字符的ASCH碼,編寫匯編語言程序?qū)崿F(xiàn),將這組

字符串傳送到緩沖區(qū)BUFR中,并且使字符串的順序與原來的順序相反。

18.利用移位、傳送和相加指令實(shí)現(xiàn)AX的內(nèi)容擴(kuò)大10倍。

19.在緩沖區(qū)VAR中連續(xù)存放著3個(gè)16位的無符號(hào)數(shù),編寫程序?qū)崿F(xiàn)將其按遞增關(guān)系

排列;如果VAR中保存的為有符號(hào)數(shù),則再編寫程序?qū)崿F(xiàn)將其按遞減關(guān)系排列。

20.編寫程序段實(shí)現(xiàn)將BL中的每一位重復(fù)4次,構(gòu)成32位的雙字DX:AX,例如當(dāng)BL

=O0111OB時(shí),得到的(DX)=0F0FH,(AX)=0FF0FH。

21.編寫程序段實(shí)現(xiàn)將AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例

如(AL)=0U00101B,(BL)=11011010B,則得到的(DX)=1011011010011001B,

22.在變量VARI和VAR2中分別保存有兩個(gè)字節(jié)型的正整數(shù),編寫完整的匯編語言程序

實(shí)現(xiàn):

(1)當(dāng)兩數(shù)中有一個(gè)奇數(shù)時(shí),將奇數(shù)存入VAR1,偶數(shù)存入VAR2;

(2)當(dāng)兩數(shù)均為奇數(shù)時(shí),兩個(gè)變量的內(nèi)容不變:

(3)當(dāng)兩數(shù)均為偶數(shù)時(shí),兩數(shù)縮小一倍后存入原處。

23.已知在字變量VARI、VAR2和VAR3中保存有3個(gè)相同的代碼,但有一個(gè)錯(cuò)碼,編寫

程序段找出這個(gè)錯(cuò)碼,并將它送AX,其地址送SI;如果3個(gè)代碼都相同,則在AX中置一1

材;’8O

24.分析下列程序段的功能:

MOVCL,04

SHLDX,CL

MOVBL,AH

SHLAX,CL

SHRBL,CL

ORDL,BL

25.下列程序段執(zhí)行后,求BX寄存器的內(nèi)容:

MOVCL,3

MOVBX,0B7H

ROLBX,1

RORBX,CL

26.下列程序段執(zhí)行后,求BX寄存器的內(nèi)容:

MOVCL,5

MOVBX,7D5CH

SHRBX,CL

27.設(shè)數(shù)組ARRAY的第1個(gè)字節(jié)存放數(shù)組的長(zhǎng)度(<256),從第2個(gè)字節(jié)開始存放無符

號(hào)8位數(shù),求數(shù)組元素之和(結(jié)果放在AX中)。如果計(jì)算的和超出16位數(shù)的范圍,則給出

溢出標(biāo)志DX=-1。

28.設(shè)BUF中存放有N個(gè)無符號(hào)數(shù)(或有符號(hào)數(shù)),編程實(shí)現(xiàn)求它們的最小值(存入AX)

和最大值(存入DX)。

29.設(shè)BUFFER中存放有N個(gè)無符號(hào)(第1個(gè)字節(jié)存放緩沖區(qū)的長(zhǎng)度),編程實(shí)現(xiàn)將其

中的。元素抹去,并更新其長(zhǎng)度。

30.編寫程序?qū)崿F(xiàn)N個(gè)字乘以或除以1個(gè)字,設(shè)BUFN存放N個(gè)字,BUF1存放乘數(shù)或除

數(shù),PRODUCT存放乘積,QUOTIENT存放商,REMAINDER存放余數(shù)。

31.編寫一個(gè)子程序?qū)崿F(xiàn)統(tǒng)計(jì)AL中1的個(gè)數(shù),然后檢測(cè)出字節(jié)型緩沖區(qū)BUF中0和1

個(gè)數(shù)相等的元素個(gè)數(shù)。

32.設(shè)有n(設(shè)為17)個(gè)人圍坐在圓桌周圍,按順時(shí)針給他們編號(hào)(1,2,…,n),從

第1個(gè)人開始按順時(shí)針方向加1報(bào)數(shù),當(dāng)報(bào)數(shù)到m(設(shè)為11)時(shí),該人出列,余下的人繼續(xù)

進(jìn)行,直到所有人出列為止。編寫程序模擬這一過程,求出出列人的編號(hào)順序。

33.編寫子程序?qū)崿F(xiàn)以卜六進(jìn)制數(shù)在屏幕上顯示AL的內(nèi)容。

34.從鍵盤上讀入

溫馨提示

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

評(píng)論

0/150

提交評(píng)論