




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)嵌入標(biāo)志燈數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)不銹鋼立式氧氣瓶推車數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 河北省衡水市阜城實(shí)驗(yàn)中學(xué)2024-2025學(xué)年高一下學(xué)期3月月考物理試題(含答案)
- 2019-2025年軍隊(duì)文職人員招聘之軍隊(duì)文職法學(xué)通關(guān)題庫(kù)(附答案)
- 遵守紀(jì)律合同范本(2篇)
- 健康產(chǎn)業(yè)智能化醫(yī)療設(shè)備研發(fā)方案設(shè)計(jì)
- 《化學(xué)元素周期表制作技巧分享》
- 小學(xué)生動(dòng)物故事集征文
- 設(shè)計(jì)迭代流程圖表
- 基于物聯(lián)網(wǎng)技術(shù)的農(nóng)產(chǎn)品供應(yīng)鏈管理優(yōu)化方案
- 英語-山東省日照市2022級(jí)(2025屆)高三校際聯(lián)合考試(日照一模)試題和答案
- 2024年上半年教師資格證《高中數(shù)學(xué)》真題及答案
- 妊娠期糖尿病飲食指導(dǎo)
- 執(zhí)行難問題現(xiàn)狀成因及解決對(duì)策
- 光伏現(xiàn)代農(nóng)業(yè)大棚現(xiàn)狀與分析
- 1概論-3(建筑構(gòu)造)ppt課件
- 電纜敷設(shè)施工方案及安全措施范文
- 卡通手繪可愛小兔子PPT模板
- 軍事地形學(xué)地形圖基本知識(shí)
- 小兒體格檢查(課堂PPT)
- ppt模板:信保專用中國(guó)出口信用保險(xiǎn)公司課件
評(píng)論
0/150
提交評(píng)論