版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
習(xí)題一把下列2、8、16進(jìn)制數(shù)轉(zhuǎn)換成為十進(jìn)制數(shù)(1)(1011011)2 (2)(0.10110)2 (3)(111111.01)2 (4)(1000001.11)2(5)(377)8 (6)(0.24)8 (7)(3FF)16 (8)(2A.4)16解: (1)(1011011)2=64+16+8+2+1=91另解:原式=(5B)16=5×16+11=91(2)(0.10110)2=0.5+0.125+0.0625=0.6875(3)(111111.01)2=32+16+8+4+2+1+0.25=63.25另解:原式=(1000000-1+0.01)2=64-1+0.25=63.25(4)(1000001.11)2=64+1+0.5+0.25=65.75(5)(377)8=3×64+7×8+7=255另解:原式=(400-1)8=4×64-1=255(6)(0.24)8=2×0.125+4×0.015625=0.3125(7)(3FF)16=3×256+15×16+15=1023另解:原式=(400-1)16=4×256-1=1023(8)(2A.4)16=2×16+10+4×0.0625=42.25另解:原式=2×16+10+4÷16=42.251.2把下列十進(jìn)制數(shù)轉(zhuǎn)換為2、16進(jìn)制數(shù) (1)(127)10 (2)(33)10 (3)(0.3)10 (4)(0.625)10 (5)(1023.5)10 (6)(377)10 (7)(1/1024)10 (8)(377/32)10解: (1)(127)10 =64+32+16+8+4+2+1=(1111111)2=(7F)16另解:原式=(128-1)10=(10000000-1)2=(1111111)2=(7F)16(2)(33)10 =32+1=(100001)2=(21)16(3)(0.3)10 =(0.010011001……)2=(0.4CCC……)16(4)(0.625)10=0.5+0.125=(0.101)2=(0.A)16(5)(1023.5)10=512+256+128+64+32+16+8+4+2+1+0.5=(1111111111.1)2=(3FF.8)16(6)(377)10 =256+64+32+16+8+1=(101111001)2=(179)16(7)(1/1024)10=(0.0000000001)2=(0.004)16(8)(377/32)10=(256+64+32+16+8+1)÷(32)=(101111001)2÷(100000)2=(1011.11001)2=(0B.C1)161.3把下列二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù) (1)(100011)2 (2)(0.11101)2 (3)(11111.11)2 (4)(0.00101)2解: (1)(100011)2=(10’0011)2=(2)(0.11101)2=(0.1110’1000)2=(3)(11111.11)2=(1’1111.1100)2=1F(4)(0.00101)2=(0.0010’1000)2=1.4把下列十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù) (1)(3B6)16 (2)(100)16 (3)(80.2)16 (4)(2FF.A)16解: (1)(3B6)16 =(001110110110)2(2)(100)16 =(000100000000)2 (3)(80.2)16 =(10000000.0010)2 (4)(2FF.A)16=(001011111111.1010)21.5如果用24b儲存一個無符號數(shù),這個數(shù)的范圍是什么?如果儲存的是一個補(bǔ)碼表示的有符號數(shù),那么這個數(shù)的范圍又是什么?答:如果用24b儲存一個無符號數(shù),這個數(shù)的范圍應(yīng)為:0~224-1 如果用24b儲存一個補(bǔ)碼表示的有符號數(shù),這個數(shù)的范圍應(yīng)為:-223~+223-11.6兩個無符號數(shù),它們的大小等于十進(jìn)制數(shù)210和303,用N位二進(jìn)制存儲時,相加產(chǎn)生了進(jìn)位,用N+1位二進(jìn)制存儲時,相加沒有產(chǎn)生進(jìn)位。這個N等于多少?為什么?答:210+303=513,29<513<210,取N=9時,相加會產(chǎn)生進(jìn)位,取N=10,相加就不會產(chǎn)生進(jìn)位,因此,本題中N=9。1.7兩個8位二進(jìn)制無符號數(shù)相加后沒有產(chǎn)生進(jìn)位,符號標(biāo)志SF=1,它們和應(yīng)在什么范圍內(nèi)?如果SF=0,那么和又在什么范圍內(nèi)?答:如果SF=1,它們的和應(yīng)在27~28-1,也就是128~255之內(nèi)。如果SF=0,它們的和應(yīng)在0~27-1,也就是0~127之內(nèi)。1.8兩個8位補(bǔ)碼表示的有符號數(shù)相加時,什么情況下會使進(jìn)位標(biāo)志等于“1”?相減時,又是什么情況下會使借位標(biāo)志等于“1答:兩個8位補(bǔ)碼表示的有符號數(shù)相加時,下列情況會使進(jìn)位標(biāo)志等于“1”:兩個負(fù)數(shù)相加;兩個異號數(shù)相加,和為正(不會產(chǎn)生溢出)。兩個8位補(bǔ)碼表示的有符號數(shù)相減時,下列情況會使借位標(biāo)志等于“1”:兩個同號數(shù)相減,差為負(fù)(不會產(chǎn)生溢出);正數(shù)減負(fù)數(shù)(有可能產(chǎn)生溢出);1.9用符號“〉”把下面的數(shù)按從大到小的順序“連接”起來 [X1]補(bǔ)=10110111[X2]原=10110111[X3]反=10110111[X4]補(bǔ)=10110110[X5]無符號數(shù)=10110111解:X1=-01001001B,X2=-0110111B,X3=-01001000B,X4=-01001010B,X5=+10110111B因此:X5>X2>X3>X1>X41.10用8位補(bǔ)碼完成下列運(yùn)算,用二進(jìn)制“真值”的格式給出運(yùn)算結(jié)果,并指出運(yùn)算后CF、OF、ZF、SF、PF標(biāo)志位的狀態(tài)。 (1)127+126 (2)126-127 (3)-100-120 (4)-100-(-120)解:(1)127+126 [127]補(bǔ)=01111111,[126]補(bǔ)=01111110,[127+126]補(bǔ)=11111101,[127+126]=-00000011(溢出)COZSP=01010(2)126-127 [126]補(bǔ)=01111110,[-127]補(bǔ)=10000001,[126-127]補(bǔ)=11111111,[126-127]=-0000001COZSP=10011(3)-100-120 [-100]補(bǔ)=10011100,[-120]補(bǔ)=10001000,[-100-120]補(bǔ)=00100100,[-100-120]=+00100100(溢出)COZSP=01001(4)-100-(-120) [-100]補(bǔ)=10011100,[-120]補(bǔ)=10001000,[[-120]補(bǔ)]求補(bǔ)=01111000,[-100-(-120)]補(bǔ)=00010100,[-100-(-120)]=+00010100COZSP=000011.11把二進(jìn)制代碼1001011101011000分別“看作”是: (1)二進(jìn)制無符號數(shù) (2)二進(jìn)制補(bǔ)碼 (3)壓縮BCD碼 (4)非壓縮BCD碼 哪一種情況下它代表的“值”最大?答:看作二進(jìn)制無符號數(shù)時,它代表的“值”最大。分析:看作二進(jìn)制補(bǔ)碼時,它代表一個負(fù)數(shù),而其它的情況下,它均為正數(shù)。因此,看作二進(jìn)制補(bǔ)碼時,它代表的值最小。 把這組代碼用十六進(jìn)制數(shù)字形式寫出:9758 對于無符號數(shù),它的值等于十六進(jìn)制的9758H; 對于壓縮BCD碼,它的值等于十進(jìn)制的9758,顯然小于9758H; 對于非壓縮BCD碼,它的值等于十進(jìn)制的78,顯然更小于9758H; 因此,看作二進(jìn)制無符號數(shù)時,它代表的“值”最大。1.12CPU使用“寄存器”有什么好處?為什么?答:CPU使用寄存器主要有兩個好處:寄存器位于CPU內(nèi)部,訪問寄存器比訪問內(nèi)存儲器速度快;寄存器數(shù)量大大少于內(nèi)存儲器單元個數(shù),標(biāo)識寄存器使用的二進(jìn)制代碼比標(biāo)識內(nèi)存儲器單元使用的二進(jìn)制代碼少得多,可以縮短指令長度。1.13已知8086系統(tǒng)某存儲單元物理地址為12345H,寫出4個可以與它對應(yīng)的“邏輯地址”。答:可以與物理地址12345H對應(yīng)的邏輯地址有:1234H:0005H,1230H:0045H,1220H:0145H,1224H:0105H,……1.14已知8086系統(tǒng)某存儲單元物理地址為12345H,可以與它對應(yīng)的“邏輯地址”中,段基址最大值,最小值分別是多少?答:可以與物理地址12345H對應(yīng)的邏輯地址中,段基址的最大值為1234H,最小值為0235H。分析:偏移地址取最大值時,對應(yīng)的段基址為最小。偏移地址可選的最大值為0FFF5H(最后一位必須為5),因此最小的段基址=(12345H-0FFF5H)/10H=0235H。偏移地址取最小值時,對應(yīng)的段基址最大。偏移地址可選的最小值為0005H(最后一位必須為5),因此最大的段基址=(12345H-0005H)/10H=1234H。1.158086微機(jī)最多可以有多少個不同的“段基址”?為什么?答:由于段基址由16位二進(jìn)制數(shù)表示,因此可以有216=65536個不同的段基址。1.16在圖1-6中,假設(shè)已有(R1)=X,(R2)=Y,分別用它的機(jī)器指令和符號指令寫出計算R0←4X+2Y的程序。想一想,怎樣做才能盡量減少指令數(shù)量?答:假設(shè)已有(R1)=X,(R2)=Y,可以編制如下計算R0←4X+2Y的程序:符號指令 機(jī)器指令 注釋MOV R0,R1 10000001(81H) R0←XADD R0,R1 10010001(91H) R0←X+XADD R0,R2 10010010(92H) R0←2X+YADD R0,R0 10010000(90H) R0←4X+2Y減少指令的方法是先計算出2X+Y,然后再計算4X+2Y??梢杂卸喾N不同的寫法。1.17什么是“邏輯地址”?什么是“線性地址”?什么是“物理地址”?它們?nèi)绾无D(zhuǎn)換?答:由段的起始地址(段基址)或者段的編號和段內(nèi)相對地址兩部分表示的地址稱為“邏輯地址”。 經(jīng)過“分段機(jī)構(gòu)”處理后,用一組二進(jìn)制代碼表示的地址稱為“線性地址”。 經(jīng)過“分頁機(jī)構(gòu)”處理后,用一組二進(jìn)制代碼表示的存儲單元的“真實”的地址稱為“物理地址”。物理地址的位數(shù)等于地址總線的寬度。工作在實地址模式下的80X86MPU不使用線性地址,物理地址=段基址×16+段內(nèi)偏移地址。80X86MPU工作在保護(hù)模式下時,分段機(jī)構(gòu)用段的編號在“段描述符表”中找到段的起始地址,加上偏移地址得到“線性地址”。分頁機(jī)構(gòu)把線性地址從高位到低位分解為“頁組地址:頁地址:頁內(nèi)地址”三部分,由頁組地址(頁組號)查找“頁組表”,獲得該頁組對應(yīng)的“頁表”首地址。然后用頁地址(頁號)去查“頁表”,得到該頁的起始地址,拼接上頁內(nèi)地址,得到“物理地址”。保護(hù)模式下也可以關(guān)閉分頁機(jī)構(gòu),此時線性地址等于物理地址。1.1832位80X86和16位80X86中央處理器的段寄存器有什么不同?答:16位80X86CPU的段寄存器長度為16位,存放的是一個段起始地址的高16位。 32位80X86CPU的段寄存器長度仍然為16位,存放的是一個段在“段描述符表”中的序號,表的編號(對每一個程序,有兩張段描述符表)和這個段的優(yōu)先級別。1.19敘述“保護(hù)模式”和“虛擬8086方式”之間的關(guān)系。答:保護(hù)模式是32位80X86MPU的工作方式,對當(dāng)前運(yùn)行的所有任務(wù)實施保護(hù)。虛擬8086方式是保護(hù)模式下某一個任務(wù)的工作模式,該任務(wù)使用類似于實地址方式下的物理地址產(chǎn)生方式,使用1MB的虛擬內(nèi)存空間,主要用于運(yùn)行8086程序。習(xí)題二2.1某數(shù)據(jù)段內(nèi)有如下數(shù)據(jù)定義:X db 30,30H,‘ABC’,2-3,?,11001010B dw 0FFH,-2,“CD”Y dd 20dup(15,3dup(?),0)Z db 3dup(?)W dw Z-X 假設(shè)變量X的偏移地址為20H。按照圖2-1的格式寫出變量X各數(shù)據(jù)在內(nèi)存中的具體位置和相關(guān)內(nèi)存單元的值。寫出變量Y,Z的偏移地址。寫出變量W的值答:(1)變量X各數(shù)據(jù)在內(nèi)存中的具體位置和相關(guān)內(nèi)存單元的值如右圖。變量Y的偏移地址為002EH;變量Z的偏移地址為002EH+4×5×20=01BEH變量W的值等于變量Z和X偏移地址之差01BEH-0020H=019EH它等于變量X、Y所占用內(nèi)存單元的字節(jié)數(shù)。2.280x86指令系統(tǒng)有哪幾種類型的指令操作數(shù)?比較使用不同類型操作數(shù)后的指令長度和指令執(zhí)行時間。答:80X86指令系統(tǒng)按照長度劃分,有以下四種指令操作數(shù):寄存器操作數(shù),指令短,執(zhí)行速度快;立即操作數(shù),指令較長,執(zhí)行速度快;寄存器間接尋址和基址變址尋址表示的內(nèi)存儲器操作數(shù),這類指令長度較短,執(zhí)行速度較慢(需要訪問存儲器);直接地址,寄存器相對尋址,相對的基址變址尋址表示的內(nèi)存儲器操作數(shù),這類指令長度較長,執(zhí)行速度較慢(需要計算物理地址,訪問存儲器)。2.3 下列指令的源操作數(shù)段基址在哪個段寄存器中? (1)MOV AX,[BP][SI] (2)MOV AX,CS:8[DI] (3)MOV AX,2[EBP*1] (4)MOV AX,FS:4[ESP] (5)MOV AX,2[EBP][EAX] (6)MOV AX,[ECX][EBP*4] (7)MOC AX,[EDX][EBP] (8)MOV AX,ES:10[EBP][EAX*2]答:各指令源操作數(shù)段基址使用的段寄存器如下: (1)SS (2)CS (3)SS (4)FS (5)SS (6)DS (7)DS (8)ES2.4 判斷下列指令是否正確。若不正確,指出錯誤原因 (1)MOV AX,[EBX] (2)MOV SI,DL (3)MOV EBP,[ESP][EAX*3](4)LEA AX,3006H (5)MOV [BP][DI],0 (6)MOV [SI],[DI] (7)MOV ES,1000H (8)MOV AX,X+2 (9)MOV AX,CX+2 (10)MOV [EAX][EAX*2],AL答:(1)指令MOV AX,[EBX] 是正確的。 (2)指令MOV SI,DL是錯誤的,兩個操作數(shù)類型不匹配。 (3)指令MOV EBP,[ESP][EAX*3]是錯誤的,比例因子不能為3。(4)指令LEA AX,3006H是錯誤的,LEA指令的源操作數(shù)必須為內(nèi)存操作數(shù)。 (5)指令MOV [BP][DI],0是錯誤的,操作數(shù)類型無法確定。(6)指令MOV [SI],[DI]是錯誤的,不能同時出現(xiàn)兩個內(nèi)存操作數(shù)。 (7)指令MOV ES,1000H是錯誤的,裝載段寄存器時,源操作數(shù)不能為立即數(shù)。(8)如果“X”是用常數(shù)表達(dá)式定義的符號(例如:XEQU5+6),或者是用“DW”定義的內(nèi)存變量,指令MOV AX,X+2是正確的。否則這條指令是錯誤的。 (9)指令MOV AX,CX+2是錯誤的,源操作數(shù)表達(dá)式CX+2不是一個可以直接計算的“常數(shù)表達(dá)式”。(10)指令MOV [EAX][EAX*2],AL是正確的。2.5 現(xiàn)有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H,說明下列指令執(zhí)行后AX寄存器的內(nèi)容。 (1)MOV AX,1200H (2)MOV AX,BX (3)MOV AX,[1200H] (4)MOV AX,[BX] (5)MOV AX,1100H[BX] (6)MOV AX,[BX][SI] (7)MOV AX,1100H[BX][SI]答:(1)指令MOV AX,1200H執(zhí)行后,(AX)=1200H(立即數(shù)操作數(shù))。 (2)指令MOV AX,BX執(zhí)行后,(AX)=0100H(寄存器操作數(shù))。 (3)指令MOV AX,[1200H]執(zhí)行后,(AX)=4C2AH(直接地址,EA=1200H) (4)指令MOV AX,[BX]執(zhí)行后,(AX)=3412H(寄存器間接尋址,EA=0100H) (5)指令MOV AX,1100H[BX]執(zhí)行后,(AX)=4C2AH(相對地址,EA=1200H) (6)指令MOV AX,[BX][SI]執(zhí)行后,(AX)=7856H(基址變址尋址,EA=0102H)(7)指令MOV AX,1100H[BX][SI]執(zhí)行后,(AX)=65B7H(相對基址變址尋址,EA=1202H)2.6 已經(jīng)定義字符串MYSTRING如下: MYSTRING DB ‘ASampleforaddressing.’ 用適當(dāng)?shù)闹噶畎堰@個字符串的第5,12個字符(注:第0個字符是’A’)送入BX寄存器。答:可以用如下兩條指令完成: MOV BL,MYSTRING[5] MOV BH,MYSTRING[12]2.7 下面兩條指令的功能有什么區(qū)別? MOV AX,BX MOV AX,[BX]答:指令“MOVAX,BX”把BX寄存器的內(nèi)容裝入到AX中。 指令“MOV AX,[BX]”把內(nèi)存儲器一個字的內(nèi)容裝入AX寄存器。該字的段基址在DS中,偏移地址在BX中。2.8 已經(jīng)定義數(shù)據(jù)段如下: DATA SEGMENT NUM=56 X DB NUM Y DB 27 Z DW 148 DATA ENDS 指出下列指令中的錯誤: (1)MOV Y,X (2)MOV BL,04B8H (3)MOV AL,Z (4)MOV [BX],3(5)MOV [BX],[DI] (6)MOV DS,DATA(7)MOV NUM,AX (8)MOV ES,DS(9)MOV AX,FLAGS (10)MOV CS,AX答:(1)指令MOV Y,X同時出現(xiàn)了兩個存儲器操作數(shù)。(2)指令MOV BL,04B8H操作數(shù)類型不匹配(04B8H是16位立即數(shù),BL是8位寄存器)。 (3)指令MOV AL,Z操作數(shù)類型不匹配(Z是16位操作數(shù),BL是8位寄存器)。(4)指令MOV [BX],3操作數(shù)類型不能確定。(5)指令MOV [BX],[DI]出現(xiàn)了兩個存儲器操作數(shù)。(6)指令MOV DS,DATA不能把立即數(shù)裝入段寄存器。(7)指令MOV NUM,AX立即數(shù)不能用作目的操作數(shù)。(8)指令MOV ES,DS不能在段寄存器之間直接傳輸。(9)指令MOV AX,FLAGS中,F(xiàn)LAGS寄存器只能隱含在少量指令中使用。(10)指令MOV CS,AX中,CS寄存器不能用作目的操作數(shù)。2.9用適當(dāng)?shù)闹噶?,把下面字符串STRING中的“&”字符用空格代替。STRING DB “TheDateisFEB&03答:可以使用如下指令: MOV STRING[15],20H ;20H是空格的ASCII代碼習(xí)題三3.1根據(jù)以下要求,寫出對應(yīng)的匯編語言指令把BX和DX寄存器內(nèi)容相加,結(jié)果存入DX寄存器。使用BX和SI寄存器進(jìn)行基址變址尋址,把存儲器中一字節(jié)內(nèi)容與AL內(nèi)容相加,結(jié)果存入存儲單元。用寄存器BX和位移量0B2H的寄存器相對尋址方式,把存儲器中一個雙字與ECX相加,結(jié)果存入ECX。用偏移地址1020H直接尋址,把存儲單元一個字內(nèi)容與立即數(shù)3相加,結(jié)果存入存儲單元。將AL寄存器內(nèi)容與立即數(shù)120相加,結(jié)果存入AL寄存器。答:(1) ADD DX,BX (2) ADD [BX][SI],AL (3) ADD ECX,[BX+0B2H] (4) ADD WORDPTR[1020H],3 (5) ADD AL,1203.2求以下各十六進(jìn)制數(shù)與62A8H之和,并根據(jù)結(jié)果寫出標(biāo)志位SF、CF、ZF、OF的值。(1)1234H (2)4321H (3)0CFA0H (4)9D60H (5)0FFFFH答: (1)1234H+62A8H=74DCH SCZO=0000 (2)4321H+62A8H=0A5C(3)0CFA0H+62A8H=3248H SCZO=0100 (4)9D60H +62A8H=0008H SCZO=0100(5)0FFFFH+62A8H=62A7H SCZO=01003.3求以下各十六進(jìn)制數(shù)與4AE0H之差,并根據(jù)結(jié)果寫出標(biāo)志位SF、CF、ZF、OF的值。(1)1234H (2)5D90H (3)9076H (4)0EA04H (5)0FFFFH答:1234H-4AE0H=0C754H SCZO=110090H-4AE0H=12B0H SCZO=00009076H-4AE0H=4597H SCZO=0001 0EA04H-4AE0H=9F24H SCZO=1000 0FFFFH-4AE0H=0B51FH SCZO=10003.4寫出執(zhí)行以下計算的指令序列,其中各變量均為16位有符號數(shù)。Z←W+(Z-X)Z←W-(X+6)-(R+9)Z←(W*X)/(Y+6),R←余數(shù)Z←(W-X)/(5*Y)*2解: (1) MOV AX,W MOV BX,Z SUB BX,X ADD AX,BX MOV Z,AX (2) MOV AX,W MOV BX,X ADD BX,6 SUB AX,BX MOV BX,R ADD BX,9 SUB AX,BX MOV Z,AX (3) MOV AX,W IMUL XMOV BX,YADD BX,9IDIV BXMOV Z,AXMOV R,DX (4) MOV AX,Y MOV BX,5 IMUL BX MOV BX,AX MOV AX,W SUB AX,X MOV CX,2 IMUL CX IDIV BX MOV Z,AX3.5一個雙字長有符號數(shù)存放在DX(高位)AX(低位)中,寫出求該數(shù)相反數(shù)的指令序列。結(jié)果仍存入DX,AX寄存器解:NOT DX ;首先將(DX,AX)取反 NOT AX ADD AX,1 ;最低位加1,注意:不能用INC指令 ADC DX,0 ;把進(jìn)位(如果有)傳遞到高位3.6指令DECBX和SUBBX,1的執(zhí)行結(jié)果一樣嗎?請分析。解:指令DECBX和SUBBX,1分別執(zhí)行后,BX寄存器內(nèi)的值相同,但是CF標(biāo)志位的狀態(tài)可能不同,這是由于DEC指令執(zhí)行后不改變CF的狀態(tài)。3.7已知內(nèi)存變量X,Y,Z均由“DB”偽操作定義,按照以下要求,使用MOVZX或MOVSX指令進(jìn)行位數(shù)擴(kuò)展,求三個數(shù)的16b和。如果X,Y,Z為無符號數(shù)如果X,Y,Z為有符號數(shù)解:(1) MOVZX AX,X MOVZX BX,Y ADD AX,BX MOVZX BX,Z ADD AX,BX (2) MOVSX AX,XMOVSX BX,Y ADD AX,BX MOVSX BX,Z ADD AX,BX3.8內(nèi)存緩沖區(qū)BUFFER定義如下,按照要求,寫出指令序列 BUFFER DB 20DUP(?)將緩沖區(qū)全部置為0,并使執(zhí)行時間最短將緩沖區(qū)全部置為空格字符(ASCII代碼20H),使用的指令條數(shù)最少將緩沖區(qū)各字節(jié)依次設(shè)置為0,1,2,3,4,……,19將緩沖區(qū)各字節(jié)依次設(shè)置為0,-1,-2,-3,-4,……,-19將緩沖區(qū)各字節(jié)依次設(shè)置為30,29,28,27,……,11將緩沖區(qū)各字節(jié)依次設(shè)置為0,2,4,6,8,……,38將緩沖區(qū)各字節(jié)依次設(shè)置為0,1,2,3,0,1,2,3,……,3解: (1) XOR EAX,EAX MOV DWORDPTR[BUFFER],EAX MOV DWORDPTR[BUFFER+4],EAX MOV DWORDPTR[BUFFER+8],EAX MOV DWORDPTR[BUFFER+12],EAX MOV DWORDPTR[BUFFER+16],EAX (2) MOV AL,20H MOV CX,20 LEA BX,BUFFER ONE:MOV [BX],AL INC BX LOOP ONE (3) XOR BX,BX MOV CX,20 ONE:MOV BUFFER[BX],BL INC BX LOOP ONE (4) XOR BX,BX XOR AL MOV CX,20 ONE:MOV BUFFER[BX],AL INC BX DEC AL LOOP ONE (5) XOR BX,BX MOV AL,30 MOV CX,20 ONE:MOV BUFFER[BX],AL INC BX DEC AL LOOP ONE (6) XOR BX,BX XOR AL MOV CX,20 ONE:MOV BUFFER[BX],AL INC BX ADD AL,2 LOOP ONE (7) XOR BX,BX MOV CX,5 ONE:MOV BUFFER[BX],0MOV BUFFER[BX+1],1MOV BUFFER[BX+2],2MOV BUFFER[BX+3],3 ADD BX,4 LOOP ONE3.9編寫循環(huán)結(jié)構(gòu)程序,進(jìn)行下列計算,結(jié)果存入RESULT內(nèi)存單元1+2+3+4+5+6+……+1001+3+5+7+9+11+……+992+4+6+8+10+……+1001+4+7+10+13+……+10011+22+33+44+……+99解: (1) CODE SEGMENT ASSUME CS:CODE RESULT DW ? START: XOR AX,AX MOV CX,100 AGAIN: ADD AX,CX LOOP AGAIN MOV RESULT,AX MOV AX,4C00H INT 21H CODE ENDS END START (2)CODE SEGMENT ASSUME CS:CODE RESULT DW ? START: XOR AX,AX MOV CX,50 MOV BX,1 AGAIN: ADD AX,BX ADD BX,2 LOOP AGAIN MOV RESULT,AX MOV AX,4C00H INT 21H CODE ENDS END START (3) CODE SEGMENT ASSUME CS:CODE RESULT DW ? START: XOR AX,AX MOV CX,50 MOV BX,2 AGAIN: ADD AX,BX ADD BX,2 LOOP AGAIN MOV RESULT,AX MOV AX,4C00H INT 21H CODE ENDS END START (4) CODE SEGMENT ASSUME CS:CODE RESULT DW ? START: XOR AX,AX MOV CX,34 MOV BX,1 AGAIN: ADD AX,BX ADD BX,3 LOOP AGAIN MOV RESULT,AX MOV AX,4C00H INT 21H CODE ENDS END START (5) CODE SEGMENT ASSUME CS:CODE RESULT DW ? START: XOR AX,AX MOV CX,9 MOV BX,11 AGAIN: ADD AX,BX ADD BX,11 LOOP AGAIN MOV RESULT,AX MOV AX,4C00H INT 21H CODE ENDS END START3.10已知ARRAY是5行5列的有符號字?jǐn)?shù)組,編寫程序,進(jìn)行下列計算(假設(shè)和仍然為16b,不會產(chǎn)生溢出)求該數(shù)組第4列所有元素之和(列號從0開始)求該數(shù)組第3行所有元素之和(行號從0開始)求該數(shù)組正對角線上所有元素之和求該數(shù)組反對角線上所有元素之和解:假設(shè)數(shù)據(jù)段已定義如下: DATA SEGMENT ARRAY DW 1,6,9,23,12 ;定義數(shù)組ARRAY DW 54,23,15,-92,37 ;每一行5個數(shù)據(jù) DW -99,231,76,81,90 ;共5行 DW 33,67,81,-99,0 ;共計25個數(shù)據(jù) DW 123,-52,77,-180,89 SUM DW ? ;SUM存放結(jié)果 DATA ENDS (1)CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,0 ;累加器在循環(huán)之前清零 MOV CX,5 ;計數(shù)器置初值 MOV SI,4*2 ;第1行第4列元素在數(shù)組內(nèi)的位移 NEXT: ADD AX,ARRAY[SI] ADD SI,5*2 ;SI指向下一行第4列元素 LOOP NEXT MOV SUM,AX MOV AX,4C00H INT 21H CODE ENDS END START (2)CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,0 ;累加器在循環(huán)之前清零 MOV CX,5 ;計數(shù)器置初值 MOV SI,3*5*2 ;第3行第0列元素在數(shù)組內(nèi)的位移 NEXT: ADD AX,ARRAY[SI] ADD SI,2 ;SI指向本行下一列元素 LOOP NEXT MOV SUM,AX MOV AX,4C00H INT 21H CODE ENDS END START (3)CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,0 ;累加器在循環(huán)之前清零 MOV CX,5 ;計數(shù)器置初值 MOV SI,0 ;第0行第0列元素在數(shù)組內(nèi)的位移 NEXT: ADD AX,ARRAY[SI] ADD SI,5*2+2 ;SI指向正對角線上下一個元素 LOOP NEXT MOV SUM,AX MOV AX,4C00H INT 21H CODE ENDS END START (4)CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,0 ;累加器在循環(huán)之前清零 MOV CX,5 ;計數(shù)器置初值 MOV SI,4*2 ;第0行第4列元素在數(shù)組內(nèi)的位移 NEXT: ADD AX,ARRAY[SI] ADD SI,(5-1)*2 ;SI指向反對角線上下一個元素 LOOP NEXT MOV SUM,AX MOV AX,4C00H INT 21H CODE ENDS END START3.11編寫程序,利用公式:N2=1+3+5+……+(2N-1)計算N2的值,假設(shè)N=23。解: DATA SEGMENT N DW 23 SQUARE DW ? ;存放結(jié)果 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,N ;循環(huán)計數(shù)器置初值 XOR AX,AX ;累加器清零 MOV BX,1 ;數(shù)列第一項 ONE: ADD AX,BX ADD BX,2 LOOP ONEMOV SQUARE,AX MOV AX,4C00H INT 21H CODE ENDS END START 3.12變量X,Y,Z均為一字節(jié)壓縮BCD碼表示的十進(jìn)制數(shù),寫出指令序列,求它們的和(用2字節(jié)壓縮BCD碼表示)。解: XOR AX,AX ;清AX,用于存放2字節(jié)結(jié)果 MOV AL,X ADD AL,Y ;完成X+Y DAA ;壓縮BCD碼加法調(diào)整 ADC AH,0 ;把可能的進(jìn)位收集到AH中 ;AH中最大的可能值為2,因此不需要BCD加法調(diào)整 ADD AL,Z ;完成X+Y+Z DAA ;壓縮BCD碼加法調(diào)整 ADC AH,0 ;把可能的進(jìn)位收集到AH中 ;計算完成,結(jié)果(2字節(jié)壓縮BCD碼)在AX中3.13數(shù)組LIST1內(nèi)存有20個非壓縮BCD碼表示的單字節(jié)十進(jìn)制數(shù),寫出完整程序,求這20個BCD數(shù)之和,結(jié)果(非壓縮BCD碼)存入SUM1雙字單元。解: CODE SEGMENT ASSUME CS:CODE LIST1 DB ‘6705762998’ DB ‘4322687310 SUM1 DD ? ;存放結(jié)果(20個數(shù)之和) START: XOR AX,AX ;累加器清零 MOV CX,20 ;循環(huán)計數(shù)器置初值 LEA BX,LIST1 ;地址指針置初值 ONE: ADD AL,CS:[BX] ;加入一個非壓縮BCD數(shù) AAA ;調(diào)整,結(jié)果在AH(百位、十位),AL(個位)中 INC BX ;修改指針 LOOP ONE ;循環(huán)控制 MOV BYTEPTRSUM1,AL ;保存?zhèn)€位 MOV AL,AH MOV AH,0 ;百位、十位(二進(jìn)制)存入AX AAM ;分解百位到AH,十位到AL MOV WORDPTRSUM1+1,AX ;保存百位、十位 MOV BYTEPTRSUM1+3,0 ;千位清零(和最大為9*20=180) MOV AX,4C00H INT 21H CODE ENDS END START3.14數(shù)組LIST2內(nèi)存有20個壓縮BCD碼表示的單字節(jié)十進(jìn)制數(shù),寫出完整程序,求這20個BCD數(shù)之和,結(jié)果(壓縮BCD碼)存入SUM2雙字單元。解: CODE SEGMENT ASSUME CS:CODE LIST2 DB 12H,34H,56H,15H,82H,52H,48H,19H,31H,63H DB 22H,33H,44H,55H,66H,77H,88H,99H,11H,39H SUM2 DD ? START: XOR AX,AX ;累加器清零 XOR BX,BX ;地址指針置初值 MOV CX,20 ;循環(huán)計數(shù)器置初值 ONE: ADD AL,LIST2[BX] ;加入一個壓縮BCD數(shù) DAA ;調(diào)整 XCHG AH,AL ;交換AH和AL ADC AL,0 ;收集進(jìn)位(百位、千位) DAA ;高位(百位、千位)調(diào)整 XCHG AH,AL ;恢復(fù)AH和AL ;(AH)=千位、百位,(AL)=十位、個位 INC BX ;修改指針 LOOP ONE ;循環(huán)控制 MOV WORDPTRSUM2,AX ;保存千、百、十、個位 MOV WORDPTRSUM2+2,0;高位清零 MOV AX,4C00H INT 21H CODE ENDS END START3.15數(shù)組LIST3內(nèi)存有20個壓縮BCD碼表示的雙字節(jié)十進(jìn)制數(shù),寫出完整程序,求這20個BCD數(shù)之和,結(jié)果(壓縮BCD碼)存入SUM3雙字單元。解: CODE SEGMENT ASSUME CS:CODE LIST3 DW 1234H,3456H,5678H,1523H,8263H,DW 5234H,4856H,1926H,3177H,6389H DW 2211H,3322H,4433H,5544H,6655HDW 7766H,8877H,9988H,1167H,3944H SUM3 DD ? START: XOR DX,DXXOR AX,AX ;累加器清零 LEA BX,LIST3 ;地址指針置初值 MOV CX,20 ;循環(huán)計數(shù)器置初值 ONE: ADD AL,CS:[BX] ;加入第一字節(jié)壓縮BCD數(shù)(十位、個位) DAA ;調(diào)整 XCHG AH,AL ;交換AH和AL INC BX ;修改指針,指向高位字節(jié)(千位、百位) ADC AL,CS:[BX] ;高位累加,并收集低位進(jìn)位 DAA ;高位(百位、千位)調(diào)整XCHG AH,AL ;恢復(fù)AH和AL ;(AH)=千位、百位,(AL)=十位、個位 INC BX ;修改指針 XCHG DX,AX ;交換AX和DXADC AL,0 ;收集千位上的進(jìn)位 DAA ;調(diào)整,得到和的十萬位和萬位 XCHG DX,AX ;恢復(fù)DX和AX LOOP ONE ;循環(huán)控制 MOV WORDPTRSUM3,AX ;保存千、百、十、個位 MOV WORDPTRSUM3+2,DX ;保存十萬位和萬位 MOV AX,4C00H INT 21H CODE ENDS END START3.16設(shè)(BX)=0E3H,變量VALUE中存放內(nèi)容為79H,指出下列指令單獨執(zhí)行后的結(jié)果。(1)XOR BX,VALUE(2)AND BX,VALUE(3)OR BX,VALUE(4)XOR BX,0FFH(5)AND BX,BX(6)AND BX,0答:(1)指令“XOR BX,VALUE”執(zhí)行后,(BX)=009AH(2)指令“AND BX,VALUE”執(zhí)行后,(BX)=0061H(3)指令“OR BX,VALUE”執(zhí)行后,(BX)=00FBH(4)指令“XOR BX,0FFH”執(zhí)行后,(BX)=001CH(5)指令“AND BX,BX”執(zhí)行后,(BX)=00E3H(6)指令“AND BX,0”執(zhí)行后,(BX)=00003.17某密碼的加密規(guī)則為:‘0’→‘A’,‘1’→‘B’,‘2’→‘C’把明文“96541833209881”翻譯為密文。把密文“JJBDAHCFFGA”翻譯成明文。答:明文“96541833209881”翻譯為密文。CODE SEGMENT ASSUME CS:CODETEXT1 DB ‘96541833209881’ TEXT2 DB 14DUP(?) START: MOV BX,0 MOV CX,14 NEXT: MOV AL,TEXT1[BX] ;取出一字節(jié)明文 ADD AL,‘A’-‘0’ MOV TEXT2[BX],AL ;保存 INC BX LOOP NEXT MOV AX,4C00H INT 21H CODE ENDS END START密文“JJBDAHCFFGA”翻譯成明文。CODE SEGMENT ASSUME CS:CODETEXT1 DB ‘JJBDAHCFFGA’ TEXT2 DB 11DUP(?) START: MOV BX,0 MOV CX,11 NEXT: MOV AL,TEXT1[BX] ;取出一字節(jié)密文 SUB AL,‘A’-‘0’ MOV TEXT2[BX],AL ;保存 INC BX LOOP NEXT MOV AX,4C00H INT 21H CODE ENDS END START3.18編寫程序,從鍵盤上輸入一行明文,按照題3.17的規(guī)則翻譯成密文,向顯示器輸出。答: DATA SEGMENT MESS DB 0DH,0AH,“Inputsometextplease:$” OUTMESS DB 0DH,0AH,‘Thetextafterconvert:’BUFFER DB 81,?,81DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,MESS MOV AH,09H INT 21H ;輸出提示信息 LEA DX,BUFFER MOV AH,0AH INT 21H ;輸入一行明文 MOV CL,BUFFER+1 MOV CH,0 ;輸入字符個數(shù)送CX LEA BX,BUFFER+2 ;首字符地址送BX NEXT: MOV AL,[BX] ADD AL,‘A’-‘0’ MOV [BX],AL ;保存 INC BX LOOP NEXT MOV BYTEPTR[BX],‘$’ ;送字符串結(jié)束標(biāo)記 MOV WORDPTRBUFFER,2020H ;緩沖區(qū)前2字節(jié)改為空格 LEA DX,OUTMESS MOV AH,09H INT 21H ;輸出轉(zhuǎn)換以后的結(jié)果 MOV AX,4C00H INT 21H CODE ENDS END START3.19變量X用DT定義,存有80b有符號數(shù),編寫程序,求X的相反數(shù),存入同樣用DT定義的變量Y。答: CODE SEGMENT ASSUME CS:CODE X DT 1234567890H Y DT ? START: MOV CX,10 ;循環(huán)計數(shù)器置初值 XOR BX,BX ;地址指針置初值 ONE:MOV AL,BYTEPTRX[BX] NOT AL ;X的一字節(jié)內(nèi)容取反 MOV BYTEPTRY[BX] ;存入Y的一個字節(jié)內(nèi) INC BX LOOP ONE ADD BYTEPTRY,1 ;Y的低位字節(jié)加1 LEA BX,Y+1 ;從Y的第2字節(jié)開始處理 MOV CX,9 ;共9個字節(jié) TWO: ADC BYTEPTRCS:[BX],0 ;收集低位來的進(jìn)位 INC BX ;修改指針 LOOP TWO ;循環(huán)控制 MOV AX,4C00H INT 21H CODE ENDS END START3.20編寫程序,使用庫子程序,從鍵盤上輸入8個有符號字?jǐn)?shù)據(jù),求它們的和,以十進(jìn)制格式輸出。答: INCLUDE YLIB.H DATA SEGEMNT MESS1 DB 0DH,0AH,‘Inputanumberplease:$’ MESS2 DB 0DH,0AH,‘Thesumis:$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX XOR BX,BX ;BX用作累加器,清零 MOV CX,8 ;循環(huán)計數(shù)器置初值 AGAIN: LEA DX,MESS1 CALL READINT ;輸入一個數(shù)據(jù)(在AX中) ADD BX,AX ;累加 LOOP AGAIN LEA DX,MESS2 MOV AX,BX CALL WRITEINT ;輸出8個數(shù)的和 CALL CRLF MOV AX,4C00H INT 21H CODE ENDS END START3.21編寫程序,從鍵盤上輸入20個十進(jìn)制數(shù)字,求這些數(shù)字的和,向顯示器輸出。答: INCLUDE YLIB.H DATA SEGEMNT MESS1 DB 0DH,0AH,‘Input20decimaldigitsplease:$’ MESS2 DB 0DH,0AH,‘Theirsumis:$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,MESS1 MOV AH,09H INT 21H ;輸出提示信息 XOR BX,BX ;BX用作累加器,清零 MOV CX,20 ;循環(huán)計數(shù)器置初值 AGAIN: MOV AH,01H INT 21H ;輸入一個數(shù)字(在AL中) AND AL,0FH ;轉(zhuǎn)換成二進(jìn)制數(shù) ADD BL,AL ;累加 ADC BH,0 LOOP AGAIN LEA DX,MESS2 MOV AX,BX CALL WRITEDEC ;輸出20個數(shù)字的和 CALL CRLF MOV AX,4C00H INT 21H CODE ENDS END START3.22閱讀以下程序,指出它的功能。 MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL答:把32位二進(jìn)制代碼(DX,AX)聯(lián)合左移4位。3.23已知(DX)=0B9H,(CL)=3,(CF)=1,確定下列指令單獨執(zhí)行以后DX寄存器的值。(1)SHR DX,1(2)SAR DX,CL(3)SHL DX,CL(4)SHL DL,1(5)ROR DX,CL(6)ROL DX,CL(7)SAL DH,1(8)RCL DX,CL(9)RCR DL,1答:(1)指令“SHR DX,1”(2)指令“SAR DX,CL”執(zhí)行之后,(DX)=0017H(3)指令“SHL DX,CL”執(zhí)行之后,(DX)=05C8H(4)指令“SHL DL,1”(5)指令“ROR DX,CL”執(zhí)行之后,(DX)=2017H(6)指令“ROL DX,CL”執(zhí)行之后,(DX)=05C8H(7)指令“SAL DH,1”(8)指令“RCL DX,CL”執(zhí)行之后,(DX)=05CCH(9)指令“RCR DL,1”3.24下面程序段執(zhí)行完成后,BX寄存器的內(nèi)容是什么? MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL答:上面程序段執(zhí)行完成后,(BX)=0C02DH寫程序,從鍵盤上輸入一個0~65535之間的十進(jìn)制無符號數(shù),然后用二進(jìn)制格式輸出這個值。例如,鍵盤輸入“35”,顯示器輸出“0000000000100011”。答: INCLUDE YLIB.H DATA SEGEMNT MESS1 DB 0DH,0AH,‘Inputaunsigneddecimalintegernumberplease:$’ MESS2 DB 0DH,0AH,‘Thenumberinbinaryis:$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,MESS1CALL READDEC ;輸入一個無符號整數(shù)MOV BX,AX ;轉(zhuǎn)存入BXLEA DX,MESS2MOV AH,09HINT 21H ;輸出提示信息 MOV CX,16 ;循環(huán)計數(shù)器置初值 AGAIN: SHL BX,1 ;向左外移一位,進(jìn)入CF MOV DL,30H ADC DL,0 ;形成一位二進(jìn)制數(shù)字的ASCII代碼 MOV AH,2 INT 21H ;輸出一個二進(jìn)制數(shù)字 LOOP AGAIN ;循環(huán)16次 CALL CRLF MOV AX,4C00H INT 21H CODE ENDS END START3.26無符號數(shù)變量X用DD定義,編寫程序,用十六進(jìn)制格式輸出變量X的值。答: .386 DATA SEGEMNT USE16 X DD 36895471 ;一個32B長整數(shù) MESS DB 0DH,0AH,‘TheXinhexdecimalis:$’ HEXTAB DB ‘0123456789ABCDEF’ DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,MESS MOV AH,09H INT 21H ;輸出前導(dǎo)信息MOV ESI,X ;將X存入ESI MOV CX,8 ;循環(huán)計數(shù)器置初值 LEA BX,HEXTAB ;換碼表首地址裝入BX AGAIN: ROL ESI,4 ;把最高4位移到最低4位上 MOV AX,SI ;低8位轉(zhuǎn)入AL AND AX,0004H ;清除高4位XLAT ;轉(zhuǎn)換成十六進(jìn)制數(shù)字的ASCII代碼MOV DL,ALMOV AH,2INT 21H ;輸出一個十六進(jìn)制數(shù)字 LOOP AGAIN ;循環(huán)16次 MOV AX,4C00H INT 21H CODE ENDS END START3.27從鍵盤上輸入兩個有符號字整數(shù)A和B,計算并輸出它們的和、差、積、商和余數(shù)。答: INCLUDE YLIB.H DATA SEGEMNT MESS1 DB 0DH,0AH,‘Inputaintegernumberplease:$’ MESS2 DB 0DH,0AH,‘Thesumof2numberis:$’ MESS3 DB 0DH,0AH,‘Thedifferenceof2numberis:$’ MESS4 DB 0DH,0AH,‘Theproductof2numberis:$’ MESS5 DB 0DH,0AH,‘Thequotientof2numberis:$’ MESS6 DB 0DH,0AH,‘Theremainderof2numberis:$’ A DW ? B DW ?DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,MESS1CALL READINT ;輸入第一個有符號整數(shù)MOV A,AX LEA DX,MESS1CALL READINT ;輸入第二個有符號整數(shù)MOV B,AXADD AX,A ;求兩個數(shù)的和LEA DX,MESS2CALL WRITEINT ;輸出兩個數(shù)的和MOV AX,ASUB AX,B ;求兩個數(shù)的差LEA DX,MESS3CALL WRITEINT ;輸出兩個數(shù)的差MOV AX,AIMUL B ;求兩個數(shù)的積,假設(shè)仍然是16位LEA DX,MESS4CALL WRITEINT ;輸出兩個數(shù)的積MOV AX,ACWDIDIV B ;求兩個數(shù)的商和余數(shù)PUSH DXLEA DX,MESS5CALL WRITEINT ;輸出兩個數(shù)的商POP AXLEA DX,MESS6CALL WRITEINT ;輸出兩個數(shù)的余數(shù)CALL CRLF MOV AX,4C00H INT 21H CODE ENDS END START3.28數(shù)組ARRAY中存有10個無符號字整數(shù)(元素序號0~9),現(xiàn)在要刪除其中的第5個元素。編寫程序,把第6~9個元素移到第5~8個元素的位置上,并把第9個元素清零。答: DATA SEGEMNTARRAY DW -386,97,213,21,77,-91,56,7,123,65 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV BX,6*2 ;第六個元素在數(shù)組內(nèi)的位移 MOV CX,4 ;循環(huán)計數(shù)器置初值 AGAIN: MOV AX,ARRAY[BX] ;取出一個元素 MOV ARRAY[BX-2],AX ;向前移動一個位置 ADD BX,2 ;修改指針 LOOP AGAIN ;循環(huán)4次 MOV ARRAY[BX],0 ;最后一個元素清零 MOV AX,4C00H INT 21H CODE ENDS END START3.29編寫指令序列,把AX中的16b二進(jìn)制分為4組,每組4b,分別置入AL,BL,CL,DL中。答: MOV DX,AX ;最低4位直接進(jìn)入DXMOV CX,4 ROL AX,CL ;最高4位移入最低4位 PUSH AX ;壓入堆棧保存(準(zhǔn)備送入AL) ROL AX,CL ;次高4位移入最低4位 MOV BX,AX ;送入BL ROL AX,CL ;第3組4位移入最低4位 MOV CX,AX ;送入CL POP AX ;從堆棧中彈出原最高4位 AND AX,000FH ;清除高12位 AND BX,000FH ;清除高12位 AND CX,000FH ;清除高12位 AND DX,000FH ;清除高12位習(xí)題四4.1什么是“三種基本結(jié)構(gòu)”?解釋“基本”兩個字在其中的含義。答:三種基本結(jié)構(gòu)指:順序結(jié)構(gòu),選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。 使用這3種結(jié)構(gòu),可以編制出任何所需要的程序,因此冠以“基本”結(jié)構(gòu)。4.2什么叫做“控制轉(zhuǎn)移指令”?它和數(shù)據(jù)傳送、運(yùn)算指令有什么區(qū)別?它是怎樣實現(xiàn)它的功能的?答:控制轉(zhuǎn)移指令是可以改變指令執(zhí)行順序的指令。數(shù)據(jù)傳送、運(yùn)算指令總是順序執(zhí)行的,而控制轉(zhuǎn)移指令通過改變IP和/或CS寄存器的值,改變了程序指令的執(zhí)行順序。4.3指令“JMP DI”和“JMP WORDPTR[DI]”作用有什么不同?請說明。答:上述兩條指令都是段內(nèi)近轉(zhuǎn)移指令,但是偏移地址的來源不同。指令“JMP DI”執(zhí)行時,新的偏移地址在DI寄存器內(nèi),“JMP WORDPTR[DI]”時,目的偏移地址在存儲單元中,該存儲單元的地址在DS:DI中。4.4什么是“近程”轉(zhuǎn)移?什么是“遠(yuǎn)程”轉(zhuǎn)移?它們的實現(xiàn)方法有什么不同?答:執(zhí)行“近程”轉(zhuǎn)移時,轉(zhuǎn)移的目的地與出發(fā)地在同一個段內(nèi),它們具有相同的段基址。因此,為了實現(xiàn)“近程”轉(zhuǎn)移,只需要改變IP寄存器的值?!斑h(yuǎn)程”轉(zhuǎn)移的目的地與出發(fā)地不在同一個段,為了實現(xiàn)這個轉(zhuǎn)移,必須同時改變CS和IP寄存器的值。4.5已知(AX)=836BH,X分別取下列值,執(zhí)行“CMP AX,X”后,標(biāo)志位ZF、CF、OF、SF各是什么?(1)X=3000H (2)X=8000H (3)X=7FFFFH (4)X=0FFFFH (5)X=0答:上述指令執(zhí)行后,標(biāo)志位ZF、CF、OF、SF的狀態(tài)分別是:(1)ZCOS=0010(2)ZCOS=0000(3)ZCOS=0010(4)ZCOS=0101(5)ZCOS=00014.6已知(AX)=836BH,X分別取下列值,執(zhí)行“TEST AX,X”后,標(biāo)志位ZF、CF、OF、SF各是什么?(1)X=0001H (2)X=8000H (3)X=0007H (4)X=0FFFFH (5)X=0答:上述指令執(zhí)行后,標(biāo)志位ZF、CF、OF、SF的狀態(tài)分別是:(1)ZCOS=0000(2)ZCOS=0001(3)ZCOS=0000(4)ZCOS=0001(5)ZCOS=10004.7測試名為X的一個字節(jié),如果X的第1,3位均為1,轉(zhuǎn)移到L1,如果只有一位為1,轉(zhuǎn)移到L2,如果兩位全為0,轉(zhuǎn)移到L3。寫出對應(yīng)的指令序列。答: MOV AL,X AND AL,00001010B JZ L3 CMP AL,00001010B JE L1 JMP L24.8假設(shè)X和X+2字單元存放有雙精度數(shù)P,Y和Y+2字單元存放有雙精度數(shù)Q,下面程序完成了什么工作? MOV DX,X+2 MOV AX,X ;雙精度數(shù)P送入DX,AXADD AX,XADC DX,X+2 ;計算2*P送入DX,AX CMP DX,Y+2 ;2P與Q的高位比較 JL L2 ;2P<Q,轉(zhuǎn)L2(Z=2) JG L1 ;2P>Q,轉(zhuǎn)L1(Z=1) CMP AX,Y ;如果高位相等,則比較低位 JBE L2 ;2P的低位小于等于Q的低位,轉(zhuǎn)L2(Z=2)L1: MOV Z,1 JMP SHORT EXITL2: MOV Z,2EXIT: ……答:程序根據(jù)2P與Q的大小,確定Z的值。 如果2P≤Q,則Z=2 如果2P>Q,則Z=1 請參閱程序注解4.9編寫指令序列,將AX和BX中較大的絕對值存入AX,較小的絕對值存入BX。答: AND AX,AX JGE SKIP1 NEG AXSKIP1: AND BX,BX JGE SKIP2 NEG BXSKIP2: CMP AX,BX JGE SKIP3 XCHG AX,BXSKIP3: ……4.10編寫指令序列,比較AX、BX中的數(shù)的絕對值,絕對值較大的數(shù)存入AX,絕對值較小的數(shù)存入BX。答: PUSH AX PUSH BXAND AX,AX JGE SKIP1 NEG AXSKIP1: AND BX,BX JGE SKIP2 NEG BXSKIP2: CMP AX,BX POP BX POP AX JGE SKIP3 XCHG AX,BXSKIP3: ……4.11編寫指令序列,如果AL寄存器存放的是小寫字母,把它轉(zhuǎn)換成大寫字母,否則不改變AL內(nèi)容。答: CMP AL,‘a(chǎn)’ JB DONE CMP AL,‘z’ JA DONE SUB AL,‘a(chǎn)’-‘A’DONE: ……4.12計算分段函數(shù): X的值從鍵盤輸入,Y的值送顯示器輸出。答: INCLUDE YLIB.H DATA SEGEMNT MESS1 DB 0DH,0AH,‘InputvalueofXplease:$’ MESS2 DB 0DH,0AH,‘Y=:$’DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,MESS1CALL READINT ;輸入X的值CMP AX,-2JGE L2 L1: SUB AX,3 ;AX←X-3 JMP DONE L2: CMP AX,3 JG L3 MOV BX,AX ADD AX,AX ;AX←2X ADD AX,AX ;AX←4X ADD AX,BX ;AX←5X ADD AX,6 ;AX←5X+6 JMP DONE L3: MOV AX,2 ;AX←2 DONE: LEA DX,MESS2CALL WRITEINT ;輸出Y的值CALL CRLF MOV AX,4C00H INT 21H CODE ENDS END START4.13計算分段函數(shù):A,B的值從鍵盤輸入,Y的值送顯示器輸出(∧表示“并且”,∨表示“或者”)。答: INCLUDE YLIB.H DATA SEGEMNT MESS1 DB 0DH,0AH,‘InputthevalueofAplease:$’ MESS2 DB 0DH,0AH,‘InputthevalueofBplease:$’ MESS3 DB 0DH,0AH,‘Y=:$’ A DW ? B DW ?DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,MESS1CALL READINT ;輸入AMOV A,AX LEA DX,MESS2CALL READINT ;輸入BMOV B,AXAND AX,AXJL L1 ;B<0,轉(zhuǎn)L1CMP A,0JL L1 ;A<0,轉(zhuǎn)L1JNZ SKIP1CMP B,0JZ L2 ;A=0&&B=0,轉(zhuǎn)L2JMP EXIT ;A=0&&B≠0,無定義,轉(zhuǎn)EXIT SKIP1: CMP B,0 JLE EXIT ;A≠0&&B=0,無定義,轉(zhuǎn)EXIT L3: MOV AX,A SUB AX,B JMP DISP L2: MOV AX,2 JMP DISP L1: MOV AX,A ADD AX,B DISP: LEA DX,MESS2CALL WRITEINT ;輸出Y的值CALL CRLF EXIT: MOV AX,4C00H INT 21H CODE ENDS END START說明:如果把A、B看作是平面直角坐標(biāo)的兩根軸,那么這個函數(shù)在A,B的正軸上無定義。無法計算,也無法輸出結(jié)果。4.14編寫程序,求10元素字?jǐn)?shù)組LIST中絕對值最小的數(shù),存入MIN單元。答: DATA SEGEMNT LIST D
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 城市供水管道規(guī)劃設(shè)計服務(wù)合同
- 保稅區(qū)主體勞務(wù)施工合同
- 二零二五年度新能源發(fā)電項目抵押借款合同2篇
- 深海探測合同管理與招投標(biāo)實訓(xùn)
- 2024淘寶平臺廣告投放與品牌曝光合同3篇
- 人工智能驅(qū)動下的智能城市建設(shè)現(xiàn)狀
- 二零二五年度學(xué)校食堂節(jié)能改造合同范本2篇
- 二零二五年度電梯租賃與智能化控制系統(tǒng)升級合同3篇
- 二零二五年度家族企業(yè)繼承與子女權(quán)益保障合同3篇
- 二零二五年度學(xué)校校園綠化工程設(shè)計與采購合同3篇
- 浙江省舟山市2023-2024學(xué)年高二上學(xué)期1月期末檢測地理試題(解析版)
- 國家電網(wǎng)有限公司架空輸電線路帶電作業(yè)工作管理規(guī)定
- 計算機(jī)安全弱口令風(fēng)險
- 《寫字樓招商方案》課件
- 文旅劇本殺項目策劃方案
- 白銅錫電鍍工藝
- 拜耳法氧化鋁生產(chǎn)工藝
- 員工述職3個月轉(zhuǎn)正報告
- 2022年海南省公務(wù)員錄用考試《申論》真題試卷及答案
- 技術(shù)成果轉(zhuǎn)移案例分析報告
- 部編版二年級下冊道德與法治第二單元《我們好好玩》全部教案
評論
0/150
提交評論