1. 程式人生 > >(2011.11.06)組合語言第02章習題(定址方式與組合語言程式的組織)

(2011.11.06)組合語言第02章習題(定址方式與組合語言程式的組織)

  

組合語言第02章習題(定址方式與組合語言程式的組織)

2.2  有兩個16位的字1EE5H 和 2A3CH 儲存在IBM PC 的000B0H 和000B03H 的記憶體單元中,請以圖表的形式說明記憶體中的儲存情況

    解:(遵照高高低低的原則)

        記憶體地址       內容

        000B4H        2AH

        000B3H        3CH

        000B2H                

        000B1H        1EH

        000B0H        E5H

2.3 如下圖, 展示的是IBM PC的記憶體資訊, 請說明30022H 位元組單元和30024H位元組單元的內容,和30021H 字單元和30022H 字單元的內容。

      儲存器    內容

      30020H    12H

      30021H    34H

      30022H    ABH

      30023H    CDH

      30024H    EFH

         解:(遵照高高低低的原則)

                  位元組:

                     30022H位元組單元的內容=0ABH

                    30024H位元組單元的內容=0EFH

                  字:

                     30021H單元的內容=0AB34H

                   30022H

單元的內容=0 CDABH

2.4 3017:000A的段地址的實體地址和偏移量是什麼?

       3015:002A和3010:007A的段地址和偏移是什麼?

      解:(實體地址及偏移地址的計算方法)

      實體地址1:PA= 3017 × 10H + 000AH = 3017AH

      實體地址2: PA= 3015 × 10H + 002AH = 3017AH

      實體地址3: PA= 3010 × 10H + 007AH = 3017AH

2.5 執行程式之前, (CS)=0A7F0H,(IP)=2B40H, 程式的第一個字的實體地址是什麼?

        解:(程式每次執行指令的地址的是CS:IP)

             PA=(CS)×10H+(IP)= 0A7F00H + 2B40H = 0AAA40H

2.6 在記憶體中,每一段都頂多有10000H位元組。下面是用DEBUG的命令“r”來在終端上展示暫存器的內容。請以圖表的形式顯示記憶體是如何劃分成段的,還有OF,SF,ZF,CF的值。

終端顯示的內容:

AX=0000 BX=0000 CX=0070 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=10E4 ES=10F4 SS=21F0 CS=31FF IP=0100 NV UP DI PL NZ NA PO NC

   解:此時 OF,SF, ZF, CF 都為0。

          (幾乎是每10000H就劃分一個段)

         10E40-10F40-資料段

           10F40-20F40-附加段

           21F00-31F00-堆疊段

            31FF00-41FF0-程式碼段

2.8 哪型別的暫存器可以用來顯示記憶體地址

      解:CS, DS, ES, SS, EAX, EBX, ECX, EDX, EBP, EIP, ESP, EDI, IP, SP, BP, BX, DI, SI

2.9 CPU--分析,控制和執行指令的元件, 包含 算術邏輯單元和一組暫存器。

    記憶體――記憶體儲存過程,資料等等, PC中,有RAM 和ROM

    Stack――儲存空間,以後進先出的方式工作。

    IP――儲存下一條要執行的指令

    SP――儲存當前棧頂地址的暫存器

    狀態標誌位――變址位記錄指令執行的結果, 包含6 個位, OF,SF,ZF, AF,PF,CF。

    控制標誌位――控制指令的標誌, PC中有三個位, 是DF,IF,TF.

    段暫存器――暫存器儲存每一個邏輯段起始地址, PC中有4種,分別是CS,DS,SS 和ES。

    實體地址――顯示儲存空間中每一個位元組的唯一的地址。

    組合語言――用指令的助記符,符號地址,標號等符號書寫程式的語言。

    機器語言――能被計算機直接識別的語言。

    彙編程式――把組合語言程式翻譯成機器語言程式的系統程式。

    連線程式――把若干個模組連線起來成為可執行檔案的系統程式。

    指令――告訴CPU要執行的操作(一般還要指出運算元的地址),在程式執行是執行。

    偽指令――由彙編程式在彙編過程中執行的指令。

5. 假定DS = 5788H, 偏移地址94H, 位元組的PA(實體地址) 是(  ).                  B

      a.57974H    b.57914H     c. 5883H   d. 58ECH

6.在段中定址的時候,在8086CPU的暫存器中,哪些暫存器可以提供偏移地址(   )    B

   A. AX, BX, CX, DX   ||   B. BX, BP, SI, DI   ||   C. SP, IP, BP, DX   ||   D. CS, DS, ES, SS

2-1下面的MOV指令完成什麼操作?

      (a)MOV AX,BX;      (c)MOV BL,CH;

      解:(mov指令的考察)

            ( a) 把BX的內容移動到AX中     (c) 把CH的內容移動到BL中

2-2 列出暫存器定址使用的8位暫存器

      解:(暫存器位數的考察)

            AH、AL、BH、BL、CH、CL、DH和DL

2-3 列出暫存器定址使用的16位暫存器

            解:(暫存器位數的考察)

                  AX、BX、CX、DX、SI、DI、SP、BP和段暫存器。

2-6 指令MOV  BL,CX 錯在哪裡?

      解:BL和CX的位數不一致。

2-7 指令MOV DS,SS 錯在哪裡?

      解:兩個暫存器之間是不能直接傳送資料的。

2-13 指令 MOV [BX],[DL] 錯在哪裡

      解:目標運算元定址方式錯誤。

2-17給定DS=1200H,BX=0100H和SI=0250H。假定按真實模式操作,確定下面每條指令定址的地址:

         解:

      (a) MOV  [100H],DL;      12100H

      (c) MOV  DL,[BX+100H];   12200H

2-18 給定DS=1100H,BX=0200H,LIST=0250和SI=0500H。假定按真實模式操作,確定下面每條指令定址的地址:

      解:(b) MOV CL,LIST[BX+SI];     11950H

2-19 給定DS=1300H,SS=1400H,BP=1500H和SI=0100H。假定按真實模式操作,確定下面每條指令定址的地址:

      解:(b) MOV AL,[BP+SI+200H];     14800H

2-20 哪些基址暫存器可以定址堆疊段的資料?

    解:SS, SP

3.1 給出(BX)=637DH,(SI)=2A9BH,偏移量D=7237H,嘗試指出下列每一種定址模式的有效地址。

(1) 立即定址;

(2) 直接定址

(3) 用BX的暫存器定址;

(4)  用BX的暫存器間接定址;

(5)  用BX的暫存器相對定址;

(6)  基址變址定址

(7) 相對基址變址定址

      解:

      (1) 無

      (2) EA=7237H

      (3) 無

      (4) EA=637DH

      (5) EA=D+[BX]=7237H+637DH=0D5B4H

      (6) EA=[BX]+[SI]=637DH+2A9BH=8E18H

      (7) EA=D+[BX]+[SI]=7237H+637DH+2A9BH=1004FH

3.2 根據下列要求, 寫出相關的組合語言指令。

(1) 把BX 的內容和DX 的內容相加,結果放入DX 中。

(2) 把AL的內容加上記憶體地址的內容,並把結果放到AL中。記憶體地址由BX和SI進行基址變址定址所得。

(3)把CX的內容加上記憶體地址的一個字,並把結果放到記憶體地址中。記憶體地址由BX和偏移量0B2H進行暫存器相對定址所得。

(4) 把記憶體地址的內容與數2A59H相加,並把結果放入記憶體地址。記憶體地址由偏移量0524H進行直接定址所得。

(5) 把數值0B5H 與AL 暫存器的內容相加, 結果放入AL暫存器。

      解(ADD指令的使用)

      (1) ADD  DX, BX

      (2) ADD  AL, BX[SI]

      (3) ADD  WORD PTR 0B2H [BX], CX

      (4) ADD  WORD PTR [0524H], 2A59H

      (5 )ADD  AL, 0B5H

3.3 寫出指令,把首址是BLOCK的字陣列中的第六個字移入DX暫存器。使用如下的定址方式。

(1) 暫存器間接定址

(2) 暫存器相對定址

(3) 基址變址定址

      解:            

       (1) LEA  BX, BLOCK+10

            MOV  DX, WORD PTR [BX]

      (2) LEA  SI, BLOCK

            MOV  DX, WORD PTR 0AH[SI]

      (3) LEA  BX, BLOCK

                MOV  SI, 0AH

                  MOV  DX, WORD PTR [BX][SI]

3.4給出(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H, (20101)=34H, (20102)=56H, (20103)=78H, (21200)=2AH,(21201)=4CH,(21202)=B7H, (21203)=65H,

嘗試解釋:執行指令後,AX暫存器的內容。

(1)  MOV  AX, 1200H

(3) MOV  AX, [1200H]

(5) MOV  AX, 1100[BX]

(7) MOV  AX, 1100[BX][SI]

      解:

            (1) (AX)=1200H

            (3) (AX)=4C2AH

            (5) (AX)=4C2AH

            (7) (AX)=65B7H

3.4   給出(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H, (20101)=34H, (20102)=56H, (20103)=78H, (21200)=2AH,(21201)=4CH,(21202)=B7H, (21203)=65H,

嘗試解釋:執行指令後,AX暫存器的內容。

(1)  MOV  AX, 1200H

(3) MOV  AX, [1200H]

(5) MOV  AX, 1100[BX]

(7) MOV  AX, 1100[BX][SI]

解:

       (1) (AX)=1200H

      (3) (AX)=4C2AH

      (5) (AX)=4C2AH

      (7) (AX)=65B7H

3.8 給出(DS)=2000H,(ES)=2100H,(SS)=00A0H,(BX)=0100H,(BP)=0010H,資料段中VAL 的偏移地址是0050H,指出源運算元段的定址方式和實體地址。

 (2) MOV  AX, BX

(4) MOV  AX, VAL

 (6) MOV  AX, ES:[BX]

(8) MOV  AX, [SI]

(10)MOV  AX, VAL[BX]

(12)MOV  AX, VAL[BX][SI]

解:

      (2) 暫存器定址

      (4) 直接定址,實體地址=20050H

      (6) 暫存器間接定址,實體地址=21100H

      (8) 暫存器間接定址,實體地址=200A0H

      (10) 暫存器相對定址,實體地址=20150H

      (12) 相對基址變址定址,實體地址=201F0H

1. 當執行POP [BX] 和尋找目標運算元時,段地址跟偏移地址是在(  )中。       B

  a. 無段地址也無偏移地址

  b. DS 和BX中

  c. ES 和 BX中

  d. SS 和 SP中

2.下列指令中, 哪個是錯的?

  a.  MOV  SS:[BX+DI],1000H

  b.  MOV  DX, 1000H

  c.  MOV  WORD PTR [BX],1000H

  d.  MOV  DS, 2000H

解:D錯誤:  立即數不能直接到段暫存器

1. 指出下列的錯誤:

1)      MOV  AH, BX

2)      MOV  [BX], [SI]

3)      MOV  AX,[SI] [DI]

4)      MOV  MYDAT [BX][SI], ES:AX

5)      MOV  BYTE  PTR[BX], 1000

6)      MOV  BX, OFFSET MYDAT[SI]

7)      MOV  CS, AX

答:

1. 指出下列的錯誤:

1)      MOV  AH, BX                                  ; 運算元大小不同

2)      MOV  [BX], [SI]                           ; 出錯:不能記憶體與記憶體之間直接傳輸資料

3)      MOV  AX,[SI] [DI]                         ; 出錯: [SI][DI]不能作為基址相對定址的組合

4)      MOV  MYDAT [BX][SI], ES:AX    ; 出錯:不能記憶體與記憶體之間直接傳輸資料

5)      MOV  BYTE  PTR[BX], 1000     ; 運算元大小不同

6)      MOV  BX, OFFSET MYDAT[SI]     ; offset指令是獲取標號處的地址,這裡應刪除[SI]

7)      MOV  CS, AX                                    ; 出錯: CS 段暫存器不能作為第一運算元

2. 給出DS = 6400h, BX = 0743h, SS=6500H, BP = CA40h, SI = 2100h 和 DI = 04A4h, 而且BETA是一個偏移量為0202h的資料項 (名稱/變數), 對於下列每一條指令指出其定址方式且計算出源運算元和目標運算元的20-位的實體地址:

•       (i) MOV AL, [BP][SI]                         ; 基址變址定址  72B40H

•       (ii) MOV [BX + DI + 4],  AX          ; 相對基址變址定址   64BEBH

•       (iii) MOV BETA, BL                      ; 直接定址  64202H

•       (iv) MOV AH, [BP][DI + BETA]     ; 相對基址變址變址  710E6

•       (v) LODSB                                      ; 暫存器定址 66100H

相關推薦

(2011.11.06)組合語言02習題方式組合語言程式組織

   組合語言第02章習題(定址方式與組合語言程式的組織) 2.2  有兩個16位的字1EE5H 和 2A3CH 儲存在IBM PC 的000B0H 和000B03H 的記憶體單元中,請以圖表的形式說明記憶體中的儲存情況     解:(遵照高高低低的原則)        

具體數學第二版習題4)

46 (1)假設$j^{'}j-k^{'}k=Gcd(j,k)$,那麼有$n^{j^{'}j}=n^{k^{'}k}n^{Gcd(j,k)}$,所以如果$n^{j^{'}j}=pm+1,n^{k^{'}k}=qm+1\rightarrow n^{Gcd(j,k)}=rm+1$ (2)假設$n=pq$並且$p

SLAM從入門到放棄:SLAM十四講習題1-4

以下均為簡單筆記,如有錯誤,請多多指教。 證明式 K =

SLAM從入門到放棄:SLAM十四講習題9

以下均為簡單筆記,如有錯誤,請多多指教。 使用Sophus的SE3類,自己設計g2o的節點與邊,實現PnP和ICP的優化。 答:對於PnP問題,需要重新設計的節點包括相機節點、Landmark節點和一

SLAM從入門到放棄:SLAM十四講習題10

以下均為簡單筆記,如有錯誤,請多多指教。 在Ceres中實現PnP和ICP的優化。 答:程式碼如下,其結果與g2o差異不大。不過感覺程式碼看起來更加簡潔,個人比較喜歡ceres。 PnP IC

SLAM從入門到放棄:SLAM十四講習題1-3

以下均為簡單筆記,如有錯誤,請多多指教。 除了LK光流之外,還有哪些光流方法?它們各有什麼特點? 答:此答案轉載於:https://blog.csdn.net/iloveayu/article/det

SLAM從入門到放棄:SLAM十四講習題4

以下均為簡單筆記,如有錯誤,請多多指教。 使用Ceres實現RGB-D上稀疏直接法和半稠密直接法。 答:由於稀疏直接法和半稠密直接法並沒有本質區別,所以此處只提供了稀疏直接法的計算結果。我的實驗結果發現,在同樣的資料集上g2o和Ceres的結果似乎不太一樣,目

具體數學第二版習題1)

1 令$n=2^{a}3^{b}5^{c}$,它的因子個數為$k=(a+1)(b+1)(c+1)$。所以$k=1,2,3,4,5,6$時對應的$n=1,2,4,6,16,12$ 2 $Gcd(n,m)*Lcm(n,m)=n*m$ $Gcd((n)mod(m),m)*Lcm((n)mod(m),m)=(n)

具體數學第二版習題4

46 (1)證明: 首先有$2n(n+1)=\left \lfloor 2n(n+1)+\frac{1}{2} \right \rfloor=\left \lfloor 2(n^{2}+n+\frac{1}{4}) \right \rfloor=\left \lfloor 2(n+\frac{1}{2})^

具體數學第二版習題3)

31 $(b)mod(d)=1\rightarrow (b^{m})mod(d)=((kd+1)^{m})mod(d)=1$ 所以$((a_{m}a_{m-1}...a_{1}a_{0})_{b}=\sum_{k=0}^{m}a_{k}b^{k})mod(d)=\sum_{k=0}^{m}a_{k}$ 也就

具體數學第二版習題2)

16 $\frac{1}{e_{1}}=\frac{1}{2},\frac{1}{e_{1}}+\frac{1}{e_{2}}=\frac{5}{6},\frac{1}{e_{1}}+\frac{1}{e_{2}}+\frac{1}{e_{3}}=\frac{41}{42}$,由此猜測$\sum_{i=1}^

具體數學第二版習題3

31 $\left \lfloor x \right \rfloor+\left \lfloor y \right \rfloor+\left \lfloor x+y \right \rfloor=\left \lfloor x+\left \lfloor y \right \rfloor \right \r

SLAM從入門到放棄:SLAM十四講習題1-4

以下均為簡單筆記,如有錯誤,請多多指教。 驗證SO(3)SO(3)SO(3)、SE(3)SE(3)SE(3)和Sim(3)Sim(3)Sim(3)關於乘法成群。 證: 已知SO(3)={R∈R3×3

《演算法競賽入門經典第二版 習題1-5

習題3-1 得分(UVa1585 Score) #include<iostream> #include<stdio.h> #include<string.h> using namespace std;   int main(){    

Python核心程式設計v2.0 13習題

13. 大概寫了下設想的樣式,stock函式中的價格,應該由市場來呼叫,每日更改。這個地方設成定值,就沒寫程式驗證了。 核心在於使用者再去呼叫當時儲存的stock類時,price已經改變就有了利潤。 stack類只應該是和這隻股票相關的資料。股票當日價格,

6.4Android程式設計權威指南3版————程式碼報告編譯版本、限制作弊次數

報告編譯版本 關鍵程式碼 xml檔案 <TextView android:id="@+id/tv_compile_version" android:layout_width="wrap_content" android:layout

刷紫書例題例題3-4,3-5,3-6

例題3-4 Master-Mind Hints UVA - 340 MasterMind is a game for two players. One of them, Designer, selects a secret code. The other, B

資料表示、方式指令系統_計算機系統結構第二_自考本科

概要:計算機系統結構第二章資料表示、定址方式與指令系統知識點小結 一、資料表示(應用) 1、資料表示的定義,資料表示與資料結構的關係     定義:能由計算機硬體識別和引用的資料型別,表現再它有對這種型別的資料進行操作的指令和運算部件 &nbs

python 核心編程 習題

創建 per 列表 一個 join def print 習題 反轉 6-6 創建一個類似 string.strip() 函數 方法一 低效方法 大量復制和生成子串對象 def str_strip(s):   while len(s)>=2:   

核心編程第二版習題

算術 幫我 __main__ div index spa end new 字典序 6–1. 字符串.string 模塊中是否有一種字符串方法或者函數可以幫我鑒定一下一個字符串是否是另一個大字符串的一部分? 成員關系操作符in obj in seq 6&nd