【轉載】 彙編語言考前總結

題外話:學好彙編,建議大家看王爽老師的《彙編語言》 清華大學出版社 

圖書配套網站 彙編網:http://www.asmedu.net/ 討論氛圍非常好。

JRH的彙編網博客(賣弄一下呵呵):http://www.asmedu.net/blog/user/usermain.jsp?neighborId=39135

----------------------------------------------------------------------正文------------------------------------------------------------


AuthorJRH        from XJTU CS 09             2011-7-10

彙編語言考前總結

第一章基礎知識

【大綱要求】

1.掌握常用的各種進制數的表示、轉換規則和運算;

2.掌握帶符號數的碼製表示方法及其補碼運算;

3.熟悉數據的表示範圍;

4.瞭解計算機存取信息的基本數據類型;

5.瞭解計算機中字符的表示;

6.熟悉幾種基本的邏輯運算;

7.什麼叫彙編語言。

 

【思考題】

1. 計算機內部是採用什麼計數制來表示數和信息的?

二進制

 

2. 十進制數轉換爲二進制數有幾種方法?

  降冪法、除法

 

3. 二進制數和十六進制數是如何相互轉換的?

  二進制到十六進制:從低到高四位一組,直接用十六進制數表示。

 

4. 計算機中如何表示正負數的?

原碼、反碼、補碼

 

5. 計算機中的整數有幾種表示方法?最常用的是哪一種碼制?

 

 

6. 基本的邏輯運算包括哪幾種運算?

與、或、非、異或

 

7. 求補的運算規則是什麼?

  除符號位,按位取反最後加一

 

8. 計算機中是採用什麼代碼來表示字符的?

ASCII

2 80X86 計算機組織

【大綱要求】

1.熟悉計算機系統的組成;

2.熟練掌握8086/8088CPU的寄存器組;

3.掌握80X86CPU的寄存器組;

4.掌握存儲器地址的分段表示及其物理地址的計算;

5.熟悉段的引用規定。

 

1.微計算機系統一般包括哪兩部分?

硬件和軟件

 

2. 8086 微處理器主要由哪幾部分組成?它們的功能是什麼?

 算術邏輯部件ALUarithmetic logic unit):進行算術和邏輯運算。

 控制邏輯:負責全機的控制工作。

 工作寄存器:相當於運算器中的一個儲存單元,存放計算過程中所需要或所得到的各種信息(地址、數據、中間結果)

 

3.一個字節和一個字分別由幾個二進制位組成?

8 16

 

4.Intel系列微型機中是如何編址的?

 

 

5.一個字節和一個字在存儲器中是如何存儲的?

字節:8bit存放一個字節

字:低位字節存入低地址,高位字節存入高地址

 

6.字單元的地址是偶數或是奇數時,訪問存儲器有什麼不同?

字單元的地址用其低位地址表示,因爲以偶地址訪問(讀/寫)存儲器,,一次讀一個字節長度。如果字單元地址是偶數,那麼訪問一個字只需一次,而如果字單元地址是奇數,訪問一個字序兩次。

 

7.8086微型機可以訪問的最大存儲空間是多少?應用幾位地址來表示?

1M  20位地址

 

8.8086微機中,如何提供20位的地址?如何形成物理地址?

   儲存器採用分段管理,一個內存單元地址由 段基址:偏移量 兩個邏輯地址來描述。

物理地址=10H×段寄存器 + 偏移地址

 

9.8086微機中,存儲器空間可分爲幾種邏輯段?每段的可尋址空間是多大?段地址存放在哪些寄存器中?

464K代碼段CS寄存器、數據段DS寄存器、堆棧段SS寄存器、附加段ES寄存器

 

10.CPU中有哪幾類寄存器,它們各自的專門用途是什麼?

數據寄存器:AX:累加器,乘除指令存放操作數,I/O指令使用其與外設傳送信息

BX:通用,常用作基址寄存器

CX:計數器(移位指令、循環指令、傳處理指令)

DX:雙字長運算(和AX組合)存放高位字,I/O操作存放I/O端口地址(對25665535號端口讀寫時用)。

指針及變址寄存器:SP:存放當前堆棧棧頂偏移量,總是和SS堆棧寄存器配合

BP:存放地址偏移量或數據,缺省和SS配合

DI:存放串數據的目的地址偏移量(或數據)若存放偏移量時,缺省情況與DS配合。

SI存放串數據的原地址偏移量(或數據)若存放偏移量時,缺省情況與DS配合

  控制寄存器:IP:存放代碼段中的指令地址偏移量,始終指向下一條即將執行的指令的首地址,控制器根據指令字長自動增加

FLAGES

 

  段寄存器:  CS:存放當前正在運行的程序代碼段基地址

DS:指定當前運行程序所使用的數據段基地址

SS:指定堆棧段位置,存放堆棧段的基地址

ES:指定當前運行程序所使用的附加數據段基地址

 

11.條件碼標誌和控制標誌各包含幾位?它們每位所表示的意義是什麼?

條件碼標誌位用於記錄程序運行結果的狀態信息,共6位:

                OF  溢出標誌 

SF  符號標誌

ZF  零標誌

CF  進位標誌

AF  輔助進位標誌

PF  奇偶標誌

控制標誌位控制處理器的操作,要通過專門的指令才能使控制標誌位變化。

               DF  方向標誌 

IF  中斷標誌

TF  陷阱標誌

 

12.什麼是DOSBIOS功能調用?

 

第三章80x86的指令系統和尋址方式

1.什麼是指令和指令系統?指令在什麼時候由哪部分來執行?

指令:

指令系統:一組指令集。計算機所能執行的所有指令的集合就是指令系統。

算術邏輯單元執行。

 

2.8086彙編語言指令由幾部分組成?各部分的作用是什麼?

操作碼字段:指示計算機所要做的操作

操作數字段:指出在指令操作過程中所需要的操作數

 

3.8086彙編語言指令可以有幾個操作數?指令中指定的操作數可能存放在哪裏?

 零地址指令:ret

 一地址指令:inc ax

 二地址指令:mov ax,[2000h]

 三地址指令:很少用

存放在:指令中、寄存器中、內存單元中、I/O接口寄存器中

 

 

4.什麼是尋址方式?8086彙編語言提供了幾種尋址方式?

 1.(太哲學了!!!!)

 2. (這樣的問題很×疼)

尋址方式實際上非常之容易:記住四個寄存器:

BX,BP;

DI,SI;

可以

單獨使用  MOV AX,[BX]  MOV AX,[SI]

組合使用,但只能BXBP中的一個和DISI中的一個搭配 MOV AX,[BX+SI]

         MOV AX,[BX+BP]MOV AX,[DI+SI]是錯誤的!

         當然可以加常數如MOV AX,[BX+SI+5]

知道這些後自己再對應其名字吧,什麼“基址變址”什麼××× . 會用就行。

 

5.各種尋址方式所確定的有效地址是什麼?

偏移地址

 

6.在存儲器尋址方式中,爲什麼有時候要使用段跨越前綴?

段跨越前綴用以指定段寄存器

 

7.8086機器語言指令由哪幾個字節組成?爲什麼說彙編語言指令與機器指令是一一對應的?

8086機器語言指令是多字節指令,一條指令可以由17個字節組成。

具體見P49

8.8086的指令系統按功能可分爲幾組?

數據傳送指令,算術指令,邏輯指令,傳處理指令,控制轉移指令。

 

9.每條指令的功能、助記符、所支持的尋址方式、對標誌位的影響、需要預置的參數以及隱含使用的或限定使用的寄存器等。

這個得好好看,看書吧。

 

第四章彙編語言程序格式

【大綱要求】

1.瞭解機器語言和彙編語言的基本概念;

機器語言:

彙編語言:

2.掌握彙編語言語句的種類;

指令、僞操作(也叫僞指令)和宏指令

3.掌握常用的僞指令;

處理器選擇僞操作:.8086

段定義僞操作:

         完整段定義僞操作

         簡化段定義僞操作

數據定義及儲存僞操作:DBDWDD、?、DUPLABLE

表達式賦值僞操作:EQU

地址計數器與對準僞操作:

$:指令中--當前所在彙編的指令的首地址;僞操作參數字段地址計數器當前值

ORG:設置當前地址計數器的值

            應用例:BUFFER LABEL BYTE

                   ORG $+8

                  相當於:BUFFER DB 8 DUP(?)

EVEN:使下一個變量或地址開始於偶地址

ALIGN:保證雙字數組邊界從4的倍數開始

     基數控制僞操作:.RADIX expression

4.掌握彙編語言語句的格式;

名字 操作 操作數 註釋

5.熟悉彙編語言程序的上機過程。

編輯程序、彙編程序、連接程序、調試程序

【學習目標】

瞭解編輯程序、彙編程序、連接程序的功能及其輸入、輸出文件的類型;

編輯程序文本文件->asm 彙編程序 ->obj lst 連接程序->exe

 

瞭解彙編語言源程序的格式;

 

熟練掌握並運用段定義僞指令和數據定義及存儲器分僞指令;

 

熟悉數值表達式書寫規範;

 

學會使用DEBUG調試程序

一些命令:D  T  U  R 等等

【思考題】:

1. 建立並運行一個彙編語言程序有幾個操作步驟?

編輯程序、彙編程序、連接程序、執行程序

 

2. 指令和僞指令的區別是什麼?

    指令在程序運用期間會被計算機執行,而僞指令是在彙編程序對源程序進行彙編時處理的操作。

 

3. 在彙編語言程序中,段定義僞指令和數據定義僞指令起什麼作用?

(很哲學)

段定義爲指令作用:

數據定義爲指令作用:

 

4. 變量和標號的類型屬性分別有哪幾種?

 3種屬性

段、偏移及類型。

對於標號:段(CS)、偏移、類型(nearfar

對於變量:段、偏移、類型()

5. 什麼是表達式?表達式的優先級順序是如何排列的?

 

6. 彙編語言的上機過程是什麼?

編輯程序、彙編程序、連接程序、調試程序

 

7. 彙編語言源程序一般由幾個段組成?

 一般有數據段、代碼段、堆棧段

8. 彙編程序和連接程序的輸入、輸出文件有哪些?它們的作用是什麼?

彙編程序:輸入:asm文件 輸出:obj文件

連接程序:輸入:obj文件(加上庫文件和其他目標文件)  輸出:exe 文件

 

彙編程序主要作用:

檢查源程序;測出源程序中的語法錯誤並給出出錯信息;產生源程序的目標程序,並可給出列表。

第五章循環與分支程序設計

【大綱要求】

1.掌握彙編語言程序設計的基本步驟;

2. 熟練掌握順序、分支和循環程序設計方法;

3. 掌握彙編語言程序常用的幾種退出方法;

4. DOS系統功能調用。

【學習目標】

瞭解並掌握循環程序的構造方法,尤其是對循環控制條件的設置以及可能出現的邊界情況的考慮。

掌握起泡排序算法這種多重循環程序設計中的常用方法。交換標誌位的設置在此算法中更能提高效率。

學會在數組排序算法中採用折半查找法來提高查找效率。

學會使用跳躍表法實現CASE結構。

【思考題】

1. 編制一個彙編語言程序分哪幾步?

 分析題意,確定算法

 根據算法,畫出程序框圖

 根據框圖編寫程序、

上機調試程序

2. 循環程序有哪兩種基本結構?由幾部分組成?

DO_WHILE DO_UNTIL

三部分:設置循環初始狀態

        循環體

        循環控制部分

3. 設計算法時對可能出現的邊界情況如何考慮?

 

4. 如何設置邏輯尺?

練習程序:

assume ds:data

data segment

   x dw 1,2,3,4,5,6,7,8

   y dw 1,2,3,4,5,6,7,8

   z dw 8 dup(?)

   logic_rule dw 5h

data ends

code segment

 start:

      mov ax,data

      mov ds,ax

      mov bx,0

      mov cx,8

      mov si,0

      mov dx,logic_rule

    next:

      mov bx,x[si]

      mov bp,x[si]

      shr dx,1

      jc  one

      add bx,bp

      jmp short result

     one:

      sub bx,bp 

     result:

      mov z[si],bx

      add si,2

      loop next

     

      mov ax,4c00h

      int 21h

code ends

end start

 

由於logic_rule 設爲00000101,實現在對x,y相應進行 —+—+++++

5. 起泡排序算法用彙編語言如何實現?

;冒泡排序

;author JRH

;2011.7.10

assume ds:data

data segment

  a dw 1,4,2,5,7,9,6,3

data ends

code segment

start:

     mov ax,data

     mov ds,ax

     mov cx,8

     dec cx

    lop1:

         push cx

         mov dx,0

         mov si,0

         lop2: 

         mov bp,a[si]

         cmp bp,a[si+2]

         jnb go_on

         xchg bp,a[si+2]

         mov a[si],bp

         mov dx,1 ;標誌位

      go_on:

         add si,2

         loop lop2

         pop cx

         cmp dx,0

         jz over

    loop lop1

      over:

      mov ax,4c00h

      int 21h

code ends

end start

6. 如何理解數組排序算法中採用的折半查找法?

 

7. 如何使用跳躍表法實現CASE結構?

例:

;author JRH

;2011.7.10

assume ds:data

data segment

 branch_table dw rout1,rout2,rout3,over,over,over,over,over

 jump_rule    dw 2h   ; 00000010B ,這裏”rout2 .

data ends

code segment

start:

      mov ax,data

      mov ds,ax

      lea bx,branch_table

      mov ax,jump_rule

   keep:

      shr ax,1

      jnb not_yet;IF CF=0

      jmp  WORD  ptr [bx] 

      rout1:

      mov cx,1

      jmp over

      rout2:

      mov cx,2

      jmp over

      rout3:

      mov cx,3

      jmp over

      not_yet:add bx,type branch_table  

      jmp keep

      over:

      mov ax,4c00h

      int 21h

code ends

end start

第六章子程序結構

【大綱要求】

1.掌握子程序結構和參數傳遞;

2.熟練掌握嵌套子程序和遞歸子程序設計;

3.熟悉MASM提供的結構僞操作STRUC

4.熟練運用子程序編程。

【思考題】

1. 子程序調用和返回時需要保護與恢復哪些寄存器?

一般而言子程序用到的寄存器是應該保存的。但如果使用寄存器在主程序與子程序之間傳遞參數的話,這種寄存器不用保存。

2. 子程序的參數傳送有幾種方法?

寄存器、堆棧、地址表

3. 僞操作STRUC的用途是什麼?

使用STRUC可以把不同類型的數據放在同一數據結構裏。

  具體實現:

4. 子程序嵌套與遞歸的區別?

 

第七章高級彙編語言技術

【大綱要求】

1.熟練掌握宏彙編;

2..掌握重複彙編;

3.熟悉條件彙編。

【學習目標】

瞭解並掌握宏彙編、重複彙編及不定重複彙編、條件匯

編和高級語言結構編程技術。

【思考題】

1. 宏彙編技術與子程序技術相比有哪些優、缺點?它們的工作方式有何差別?

宏彙編

優點:多參數傳送

缺點:調用次數較多時佔用較大空間,比較適用於代碼較短且變元較多的情況

工作方式差別:

在源程序中通過寫宏名來調用宏,而子程序則通過call調用

宏彙編是在彙編階段展開,宏調用多少次就展開多少次,因而主程序長度會因此變長。而子程序是在程序執行時調用,它只佔有自身大小的一個空間。

 

2. 虛參與實參是否應一一對應?

不一定。實參可以比虛參個數多,相應多的部分不做處理;實參也可以比虛參個數少,相應少的部分做“空”處理。

 

3. 啞元表中的變元可以取何種值?

 

4. &操作符及%操作符如何應用?

必須掌握,見P263+

 

5. 宏定義體內的程序段有標號怎麼辦?

爲防止展開後出現標號多重定義,使LOCAL操作。LOCAL操作只能用在宏定義體內,且必須是MACRO僞操作後的第一個語句。

 

6. 宏定義允許嵌套、遞歸調用嗎?

在宏定義中允許宏調用,其限制條件是:必須先定義後調用。同時,宏定義體內還可以包含宏定義。

 

7. IRPIRPC之間的區別?

IRP的自變量表可以是常數、符號和字符串,重複次數由自變量表中的自變量個數確定。

IRPC的自變量表必須是字符串,重複次數由該字符串中字符個數確定。

例:

irp reg,<AX,BX,CX>

      push reg

      endm

 

      irpc k,<ABC>

      push k&X

      endm

 

8. 條件彙編中有哪幾種條件?

IF  IFE  IF1  IF2  IFDEF  IFNDEF  IFB<argument>  IFNB<argument>

P281

9. 高級語言結構中有哪幾種形式?

P293

 

題:編寫一條宏指令CRLF,實現回車換行功能

CRLF MACRO

MOV DL,0AH

MOV AH,02H

INT 21H

MOV DL,0DH

MOV AH,02H

INT 21H

ENDM

第八章  輸入輸出程序設計

【大綱要求】

1.瞭解輸入輸出程序設計概念;

2.掌握查詢方式傳送數據程序設計;

例如:

 WAIT: IN AL,72h

       TEST AL,80h

        JE WAIT

注意:端口號如果在25665535則應放在DX中。

查詢方式優點:可以安排幾個輸入輸出設備的優先次序,依次查詢

        缺點:CPU在外設沒有準備好之前一直在查詢等待,不能進行別的操作,效率低。

3.熟悉中斷方式傳送數據程序設計。

中斷優點:避免了因反覆查詢外部設備而浪費時間,提高CPU效率

取與設置中斷向量:

;----------------------------這個應該不用掌握------------------------------------------------

﹡直接讀寫內存:例如int N的中斷處理程序的 IP放在N*4 ,CS放在N*4+2

所以可以:

設置:如我想將ip=200h,cs=0處開始的程序作爲7號中斷的處理程序則

mov ax,0

mov es,ax

mov word ptr es:[7*4],200h

mov word ptr es:[7*4+2],0

取中斷向量就很顯然了,不再贅述。

;-----------------------------------------------------------------------------------------------------

教材(沈書)是下面這個:

﹡運用DOS功能調用:

同上例

MOV AX,200H

MOV DX,AX

MOV AX,0

MOV DS,AX

AH=25h

AL=7

INT 21H

 

中斷與子程序調用相比:中斷還需保存FLAGS的內容。中斷返回用IRET

 

第九章  BIOSDOS中斷

【大綱要求】

1. 掌握鍵盤和顯示器I/OBIOS/DOS中斷程序設計;

鍵盤:

BIOS鍵盤中斷:INT 16H

DOS鍵盤中斷:INT 21H

功能:AH=1 從鍵盤讀入一個字符並回顯

      AH=0AH 從鍵盤讀入一串字符並把它存入用戶定義的緩衝區中。DSDX爲緩衝區地址。

      AH=0CH 清除緩衝區

      AH=0BH 檢驗鍵盤狀態

     

顯示器:

可以採用直接寫顯示儲存單元的方法。

BIOS顯示器中斷:P359

DOS顯示器中斷:P365

2. 熟悉打印機I/OBIOS/DOS中斷程序設計。

 

第十三章  模塊化程序設計

【大綱要求】

1.掌握模塊化程序設計的基本概念;

把一個總體任務分成具有明確子任務的程序模塊,分別編制調試後再將它們連接在一起,形成一個完整的程序。這樣的程序設計方法叫做模塊化程序設計。

2.掌握段的完整定義和段的簡化定義的用法;

完整定義:name segment  定位類型 組合類型 類別

簡化定義:.CODE

         .STACK [大小]

         .DATA

3.掌握模塊間的通信的編程方法;

   多個模塊之間的通信方法:

   1)用外部符號定義共享參數和過程

PUBLIC EXTRN的使用

2)利用common 

 

4.熟悉子程序庫的建立和使用的編程方法;

5.彙編語言程序與高級語言程序的連接。

直接插入法 _asm

將彙編語言程序作爲外部子過程來調用。

教材:《80x86彙編語言程序設計》沈美明 溫冬嬋

參考資料:計算機系彙編語言教學大綱

彙編語言複習 ---- Dr. Xingjun Zhang 




轉自: http://blog.csdn.net/a123443/article/details/6779154

發佈了30 篇原創文章 · 獲贊 9 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章