當前位置:編程學習大全網 - 編程語言 - 跪求錢曉捷的匯編語言程序設計課後習題答案,新版或第二版都可以

跪求錢曉捷的匯編語言程序設計課後習題答案,新版或第二版都可以

第壹章

1.1

CPU 分析、控制並執行指令的部件

IP 指示下壹條將要執行的指令的地址

SP 保存當前棧頂地址的寄存器

狀態標誌 指出指令操作結果的標誌,如ZF,CF等。

控制標誌 控制操作的標誌,只有DF,IF,TF三個。

ALU 進行算術和邏輯運算的單元

存儲器 存儲程序、數據等信息的的記憶裝置。

物理地址 CPU發出的訪問存儲器的地址信息。

偏移地址 相對於段起始地址的偏移量。

段地址 是邏輯段的起始地址。

1.2下列操作可使用哪些寄存器

·存放各種運算操作的數據:AX,BX,CX,DX,SP,BP,SI,DI

(我的輔導書上沒有SP,BP;why?)

·存放數據串操作時的計數值:CX

·查看程序已執行到哪條指令的地址:IP

·查看堆棧中當前正要進行入出棧的存儲單元的地址:SP

·查年運算結果是否等於零:PSW的ZF

·查年程序中的數據存放段區是從哪個地址開始的:DS,ES

·查看程序中的指令存放的段區是從哪個地址開始的:CS

1.3段地址和偏移地址為1000:117A的存儲單元的物理地址是什麽?而1109:00EA或1025:0F2A的存儲單元的物理地址又是什麽:這說明了什麽問題?

1000:117A物理地址為:1117A;1109:00EA的物理地址為:1117A;1025:0F2A的物理地址為:1117A.說明物理地址不變,段地址改變,偏移地址也隨之變化.

1.存儲器地址對應的數據(圖略)

75422H(字節):9CH

75424H(字節):5DH

75422H(字):249CH

75424H(字):E65DH

第二章

2.1寫出相應的匯編語言指令:

(1)以寄存器BX和SI作為基址變址尋址方式把存儲器中的壹個字傳送到CX寄存器。

MOV CX,[BX][SI(註:寄存器尋址只能使用:BX,BP,SI,DI;且BX、BP或SI,DI不能同時使用,可能我說的不太對,請版主確認壹下)

(2)以寄存器BX和偏移量value作寄存器相對尋址方式把存儲器的壹個字和AX相加,把結果(即和)送回那個字單元中。

ADD value[BX],AX

(3)將壹個字節立即數0B6H與符號的地址為NUM的存儲器字節單元內容相比較。

CMP BYTE PTR 0B6H,NUM(如果前面不加BYTE RTR,默認的也是字節比較吧?還有雙字比較,應該怎麽寫?)

(4)測試從寄存器BP和DI、偏移量COUNT作為相對基址變址尋址方式尋址的存儲器字節單元內容最高位B7的值,字節單元的內容不能改變。

TEST COUNT[BP][DI],80H

(5)將AH寄存中的高4位和低4位數據互換。

MOV CL,4

ROL(或ROR) AH,CL

(6)清除以寄存器SI間接尋址的存儲器字單元,同時清除CF標誌位.

XOR AX,AX ;使AX=00000000,CF=0

MOV [SI],AX

2.2設DS=1000H,BX=2865H,SI=0120H,偏移量D=47A8H,試計算下列各種尋址方式下的有效地址.

1)使用D的直接尋址 47A8H (這道指令怎麽寫?如何定義D的值)

2)使用BX的寄存器間接尋址 2865H

3)使用BX和D的寄存器相對尋址 700DH

4)使用BX、SI和F的相對基址變址尋址 712DH

5)使用BX、SI的基址變址尋址 2985

2.3假設DS=1000H,BX=2A80H,CX=3142H,SI=0050H,(10050H)=3BH,(10051H)=86H,(11200H)=7AH,(11101H)=64H,(12ADOH)=0A3H,每小題的括號中分別填入指令執行後的結果:

1)MOV AX,1200H ;AX=1200H

2)MOV AX,[1200H] ;AX=1200H(書上的答案是647A,但是我用DEBUG試了壹下是1200,可能是因為我的PII的原因吧,希望有8088的朋友能試壹下,版主,考起試來應該怎麽寫呀?)

3)ADD [SI],CX ;(10050H)=7DH,9100510=B7H,ZF=0,CF=0,SF=1,OF=1

4)OR BYTE PTR [BX][SI],54 ;(12AD0H)=F7,CF=0,OF=0

5)MOV 150H[BX],CH ;[12BD0H]=31,CH=31

2.4指出下列指令的錯誤原因

1)MOV AX,CL 兩操作數的長度不壹樣.

2)MOV CS,AX 不能給CS賦值

3)INC BETA[BP] 書上說:沒有數據類型說明,但我認為它應該自動默認為字節操作,版主再來看看吧

4)MOV ES,1850H 立即數不能直接送段寄存器

5)ADD BX,DS 段寄存器不能做為加法操作數使用

6)AND AX,[CX] 寄存器尋址只能使用BX,SI,DI,BP

2.5說明下列指令執行的操作,說明原始數據和結果數據的存儲地點

貼子相關圖片:

作者: 218.27.73.* 2005-9-3 09:21 回復此發言

--------------------------------------------------------------------------------

2 匯編語言程序設計課後習題答案

[原始數據](結果數據)

1)mov [2700h],cx 這條指令在我的P4試了壹下,是錯誤的;如果考試時出只好說是:把[CX]中的內容送到(數據段中偏移地址為2700h字單元)中;

2)MOV DH,50[SI] 將[數據段中有效地址為SI+50的字節單元]中的數據送入(DH)中;

3)LEA SI,ARRAY 將ARRAY的偏移地址送入(SI),結果數據在[代碼段對相應指令字節中]

4)DAS 將AL中的壓縮的十六進制數調整為十進制數,結果數據在AL中,原始數據也在AL中

5)ADC CL,[BX] 將BX和CL的和加上CF的值後,存放在CL中,結果在CL中,原始在BX,CL,CF中

6)ROR WORD PTR ALPHA[SI],CL 將偏移地址為ALPHA+SI字單元中的數據循環移,結果和原始都在哪個字單元中.

2.6指出下列無條件轉移指令的轉移地址中的偏移地址是什麽,存放在何處.

1)JMP BX 偏移地址是BX中的值,存放在BX中

2)JMP WORD PTR [BX] 偏移地址是以BX中的值為偏移地址的壹個字單元中的數值,存放在以BX中的值為偏移地址的壹個字單元中

3)JMP NEAR PTR PROA 偏移地址為PROA的偏移地址,存放在CS段的相應指令處(書上說的不壹樣,請版主做下這道題)

4)JMP FAR PTR FAR_PRO 偏移地址為FAR_PRO的偏移地址,,存放在CS段的相應指令處

5)JMP SHORT AGAIN 偏移地址為AGAIN的偏移地址,存放在CS段的相應指令處(書上說的不壹樣,請版主做下這道題)

6)JMP DWORD PTR [BX][DI] 偏移地址是以BX,DI為基址變址尋址的兩個字單元的內容,存放在以BX,DI為基址變址尋址的兩個字單元中

2.7寫出把道址為BLOCK的字數組的第六個字送到CX寄器的指令序列,要發別使用以下幾種尋址方式

1)以BX寄存器的間接尋址

LEA BX,BLOCK+0AH

MOV CX,[BX]

2) 以BX寄存器的相對尋址

LEA BX,BLOCK

MOV CX,0AH[BX]

3) 以BX,SI的基址變址尋址

LEA BX,BLOCK

MOV CX,[BX][SI]

2.8指出下列指令的源和目的操作數的尋址方式

(目地操作數尋址方式;原操作數尋址方式)

1)MOV ARRAY,BX

直接尋址;寄存器尋址

2)ADC CX,ALPHA[BX][SI]

寄存器尋址;相對基址變址尋址,寄存器尋址

3)AND BYTE PTR GAMMA [DI],11011001B

寄存器相對尋址;立即尋址,寄存器相對尋址

4)INC WORD PTR [BX]

寄存器間接尋址;寄存器間接尋址

5)TEST EX:[IS],DX

(目的操作數?在哪?只改變標誌位,算寄存器尋址嗎?書上寫的寄存器間接尋址,不明白);寄存器間接尋址,寄存器尋址

6)SBB SI,[SI]

寄存器尋址;寄存器尋址,寄存器間接尋址

2.9分別說明下列每組指令中的兩條指令的區別:

1) MOV AX,TABLE

LEA AX,TABLE

前者是將變量TABLE的內容傳遞給AX;後者是將TABLE和偏移地址傳遞給AX

2) AND BL,0FH

OR BL,0FH

前者是BL的內容與0F相與;後者是BL與0FH相或

3) JMP SHORT L1

JMP NEAR PTR L1

前者為短跳轉,後者為近跳轉

4) MOV AX,[BX]

第三章

3.1

1)使計算機執行某種操作的命令 ;指令

2)表示計算機執行什麽操作的符號 ;助記符

3)存放指令機器碼的存儲器段區 ;代碼段

4)指出指令在程序中位置的符號地址 ;標號

5)將匯編語言程序翻譯成機器碼程序的實用程序 ;匯編程序

3.2試寫出完成下列操作的指示性語句:

1)將56H,78,0B3H,100存放在定義為字節變量ARRAY的存儲單元中.

ARRAY DB 56H,78,0B3H,100

2)將字數據2965H,45H,2965,0A6H存放在定義為字節變量DATA的存儲單元中.

ARRAY DB 65H,29H,45H,95H,0BH,0A6H ;書上在0B和0A6H後面有個0,不什麽是什麽.

3)將字節數據56H,0C6H,78H,12H存放在字變量ALPHA的存儲單元中.並且不改變數據按字節存儲的次序

ALPHA DW 0C656H,1278H

4)在BETA為道址的存儲單元中連續存放字節數據:2個23,5個'A',10個(1,2),20個空單元。

BETA DB 2 DUP (23),5 DUP ('A'),10 DUP (1,2), 20 DUP (?)

5)在STRING為首址的存儲單元中存放字符串'THIS IS A EXAMPE'

STRING DB 'THIS IS A EXAMPE'

3.3下列偽指令序列中,BASUB的值為多少?它表示什麽意義?

作者: 218.27.73.* 2005-9-3 09:21 回復此發言

--------------------------------------------------------------------------------

3 匯編語言程序設計課後習題答案

BUFF DB 7,6,'56',?

ARRAY DW 0,67H,7

BASUB EQU ARRAY-BUFF

BASUB的值是5,它表示ARRAY與BUFF的首地址的差.

3.4假設程序中的數據定義如下:

BUF1 DB 100 DUP ('a')

BUF2 DW 1275H,567,0C5H

BUF3 DB 20 DUP (?)

BUF4 DB 7,4,6,9,8

1)用壹條指令將BUF1的諞移地址送入BX.

LEA BX,BUF1

2)將BUF2的第三字節數據送入CL

MOV BYTE PTR CL,[BUF2+2]

3)將0A6H送入BUF3的第10個字節單元中

MOV BYTE PTR [BUF3+9],0A6H

4)用偽指令寫出BUF1和BUF2二者的總長度(字節數)

L1_2 EQU BUF3-BUF1

5)用壹組指令寫出BUF2的第二個數據567和BUF4的第三個數據6相加,結果(和)送入BUF3

MOV AL,BUF4+2

MOV AH,0

ADD AX,BUF2+2

MOV BUF3,AX

3.5指出下列第壹對偽指令語句的區別:

1)X1 DB 76; X2 EQU 76

前者是向X1的字節單元存入76,後者是將X2的值定義為76.

2)X1 DW 3548H; X2 EQU BYTE PTR X1

前者是定義X1的字單元值為3548,後者是定義X2的值為X1的第壹個字節單元的值48.

3)X1 EQU 3; X2 = 3

兩者都是賦值語句,但前者只能定義壹次,後者可以重復定義.

4)X1 DW 3678H; X2 DB 36H,78H

前者的字節單元內容依次為78,36;後者的字節單元內容依次為36,78.

5)X1 DW 6341H; X2 DW 6341

前者為十六進制的6341;後者為十進制的6341

3.6設置壹個數據段DATA_SEC,其中連續存放下列的8個變量,用段定義語句和數據定義語句寫出數據段:

1)DATA1為字符串變量:'DATA SEGMENT'

2)DATA2為十進制數字節變量:72,65,-10

3)DATA3為十六進制數字字節變量:109,98,21,40

4)DATA4為10個零的字節變量.

5)DATA5為數字的ASCII字符字節變量:12345

6)DATA6為十進制的字變量:7,9,298,1967

7)DATA7為十六進制的數的字變量:785,13475

8)DATA8為本段中字變量和字節變量之間的字節單元數之差

DATA_SEC SEGMENT

DATA1 DB 'DATA SEGMENT'

DATA2 DB 72,65,-10

DATA3 DB 6DH,62H,15H,28H

DATA4 DB 10 DUP (0)

DATA5 DB '12345'

DATA6 DW 7,9,298,1967

DATA7 DW 0311H,34A3H

D1 EQU DATA6-DATA1

D2 EQU $-DATA6

DATA8 EQU D2-D1

3.7設程序中的數據定義如下:

DATA1 DW ?

DATA2 DB 32 DUP (?)

DATA3 DD ?

DLENGTH EQU $-DATA1

問DLENGTH的值為多少?它表示什麽意義?

DLENGTH的值為38,表示DATA1,DATA2,DATA3所占用的字節數之和

3.8指出下列第壹小題中的偽指令表達的操作哪些是錯誤的?錯誤在哪時?

1)

ALPHA EQU 78H

BETA EQU ALPHA+1

沒錯.

2)

DATA DB 395

1個字節最多能夠表示256

3)

X1 SEG

.

.

.

X1 ENDS

SEG應該寫成SEGMENT

4)

ALPHA EQU BETA

BETA沒有賦值

5)

COUNT EQU 100

COUNT EQU 78

不可以用EQU給壹個變量重復賦值

6)

MAIN PROC

.

.

.

ENDP

過程結束標誌,應該有個MAIN

7)ARRAY DW 10 DUP (?)

.

.

.

JMP ARRAY

ARRAY是變量,JMP不能跳到ARRAY處

8)

SEGMENT CODE_SEG

.

.

.

ENDS CODE_SEG

書寫格式錯誤,應寫為

CODE_SEG SEGMENT

CODE_SEG ENDS

3.9對於下面的數據定義,寫出各條指令執行的結果:

FLDB DW 0A24FH

TABLE DB 32H,52,0C2H,213

TEA EQU WORD PTR TABLE

ARRAY DB 'ABCD'

COUNT EQU $-ARRAY

1)MOV AX,FLDB AL=(4FH)

2)MOV BX,TEA BH=(52H)

  • 上一篇:JAVA開發培訓主要包含哪些內容?
  • 下一篇:排球社招新海報-排球社團招新宣傳文案簡短(80句)
  • copyright 2024編程學習大全網