• 沒有找到結果。

Assembly Language Course

N/A
N/A
Protected

Academic year: 2022

Share "Assembly Language Course"

Copied!
26
0
0

加載中.... (立即查看全文)

全文

(1)

Assembly Language Course

Jeng-Yih Chiou

(2)

電腦的基本架構與運作方式

基本架構

處理單元運作方式

機器語言

機器語言與組合語言的關係

轉換對應的方式

組譯器

高階語言與組合語言的關係

優缺點比較

(3)

基本單元

處理單元 算術邏輯單元

(ALU)

控制單元 (Control Unit) 輸入單元

(Input Unit)

記憶單元 (Memory Unit)

輸出單元 (Input Unit)

(4)

依據程式與資料儲存方式

范紐曼(Von Neumann)結構

哈佛(Harvard)結構

PC Memory (Data/ CPU

Programs)

Addr.

Data Instruction

PC CPU Data Memory Data Addr. Data

Instruction

Prog. Memory Addr.

Inst.

Program

易建立自我修改程式

易處理大量串流資料

(5)

處理單元的基本架構

處理單元

算術邏輯單元 (ALU)

控制單元 (Control Unit) 輸入單元

(Input Unit)

記憶單元 (Memory Unit)

輸出單元 (Input Unit)

輸入暫存器

解碼器 輸出暫存器

指令暫存器 資料暫存器 位址暫存器 程式計數器

(6)

擷取(Fetch)

取得指令、遞增指令計數器內的值。

解碼(Decode)

解指令碼、獲知欲執行哪種指令動作

擷取運算元(Fetch Operands)

若需要由記憶單元取得運算元,將其擷取進處理單元。

執行(Execute)

執行指令動作

儲存(Store Output Operand)

若需要將結果存放進記憶單元,進行存放動作。

(7)

Fetch Decode

Execute Need

Operands? Fetch Operands

Store into

memory? Store

Yes

Yes No

No

指令執行週期

Instruction Execution Cycle

(8)

指令集

所有指令的集合

指令集表現出其所屬之處理器所能執行的所有功能 或動作。

指令集的種類

精簡指令集

 RIS (Reduced Instruction Set )

複雜指令集

 CIS (Complex Instruction Set)

(9)

依指令集分類

RISC

 Reduced Instruction Set Computers

CISC

 Complex Instruction Set Computers

RISC與CISC比較

 CISC的CPU結構比RISC的複雜。

 CISC的指令長度可變但RISC的通常是固定長度

 RISC指令的執行速度通常比CISC的快

 RISC實現pipeline技術較CISC的困難低

 RISC的運算元是暫存器的值或立即值

(10)

由01所組成的

機械碼

指令的格式通常包含有:(參考下頁ARM指令集格 式)

操作碼(operation code, OP)

運算元(operands)

為了方便

使用助記符號表示指令

指令集範例如下頁:

(11)

Cond 0 0 I Opcode S Rn Rd Operand2

Cond 0 0 0 0 0 0 A S Rd Rn Rs 1 0 0 1 Rm

Cond 0 0 0 1 0 B 0 0 Rn Rd 0 0 0 0 1 0 0 1 Rm Cond 0 1 I P U B W L Rn Rd Offset

Cond 1 0 0 P U S W L Rn Register List

Cond 0 0 0 0 1 U A S RdHi RdLo Rs 1 0 0 1 Rm

Cond 0 0 0 P U 1 W L Rn Rd Offset1 1 S H 1 Offset2

Cond 1 0 1 L Offset

Cond 1 1 0 P U N W L Rn CRd CPNum Offset Cond 1 1 1 0 Op1 CRn CRd CPNum Op2 0 CRm Cond 1 1 1 0 Op1 L CRn Rd CPNum Op2 1 CRm Cond 1 1 1 1 SWI Number

Cond 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 Rn Cond 0 0 0 P U 0 W L Rn Rd 0 0 0 0 1 S H 1 Rm

31 2827 1615 87 0

(12)

使用助記符號來編寫程式

透過約定的方式

◦ 定義常數,

◦ 表示位址

◦ 使用其他的進位方式來表示數值,

避免因為使用二進位數值的不便。

組合語言程式

◦ 透過組譯器(Assembler)將符號等轉換成對應的機械碼,並盡可 能的使結果能夠具有最佳的執行速度或使用最少的記憶體空間。

◦ 透過連結器(Linker),配置適當的位址與資訊,使其成為可執行 的程式。

連結器亦具備將多個由組譯器產生的檔案結合(combine)成單一檔 案的功能。

(13)

機器相依性強

可精確掌控執行時間

可直接擷取與控制硬體資源

不易閱讀與維護

(14)

對應的處理器為何?(機器相依性強)

不同的處理器有不同的機器碼。

不同的機器碼對應了不同的指令助記符號。

不同的處理器提供不同的定址方式。

不同的處理器擁有不同數量的暫存器,使用方式與代號也不同。

不同的處理器具有不同格式的狀態暫存器。

使用哪種組譯器?

決定了指令編寫的格式

決定了常數的表示方式

決定了不同的Directives

 Directives: 給與Assembler的指令,非處理器的指令。

(15)

高階語言

Fortran, BASIC, C, C++, JAVA, C#

一個高階語言的敘述通常對應出一個組合語言程式

高階語言敘述 組合語言程式

(16)

Writing embedded programs.

For single-purpose devices such as telephones, automobile fuel and ignition systems, air-

conditioning control systems, printers, and so on.

Writing real-time application.

Writing program that needs to directly access hardware.

Writing system programs.

(17)

資料表示法

前言

 因為組合語言程式設計人員處理的是位於實體層次的資料,

所以必須能夠很熟練的審視記憶體和暫存器。電腦通常使用

二進位去描述記憶體中的內容;不過,十進位與十六進位數

有時候也會使用到。故程式設計人員必須能夠流暢地處理各

種數值格式,且能夠很快地將各數值從某種格式轉換成另一

種格式。

(18)

二進制、八進制、十進制、十六進制數字

系統 基底 使用符號 範例

二進制 2 0,1 (111101)

2

八進制 8 0,1,2,3,4,5,6,7 (75)

8

十進制 10 0,1,2,3,4,5,6,7,8,9 (61)

10

十六進制 16 0,1,2,3,4,5,6,7,8,9,

A,B,C,D,E,F (3D)

16

(19)

每個位數以0或1表示

例: 0110

無號二進位整數轉換為十進位數

 

 

  n

k

k k

n

n b b b b

b

0 2

0 1

1 ) 2

( 

EX.:

10

10

10 0 1

2 3

4 5

6

2

) 111 (

) 1 1 2

1 4

1 8

1 16

0 32

1 64

1 (

) 2 1 2

1 2

1 2

1 2

0 2

1 2

1 (

) 1101111 (

(20)

xx

n

I x

n

2 )

( log

2

   

 

 

 

2

0

2 1

1

0

1 1

1

0

1 0

1 0

0

2 2

2

2 2

2 2

n

k

k k

n

k

k k

n

k

k k

n

k

k k

n

k

k k

b b

b x

b b

b b

b x

So,

(21)

Ex.:求十進位數10的二進位數。

0 2

1 1

1 2

0 2

2 2

1 5

5 2

1 11

2 10 ( 1011 ) )

11

( 

(22)

2’s補數表示法

. of complement s

two' called

is

1 )

( 2

),

(

1 2 0 1 2 0

x y

b b

b x

y b

b b

x

n n n n n

Ex.:

2 2

2 2

2

(0111) of

complement s

two' is

) 1001 (

) 0111 (

) 10000 (

: Ans.

? ) 0111 (

of complement s

two' the

is What

(23)

用2’s補數來表示負數,可以直接運算。

Ex.: 7-7

7-7=7+(-7)

0111+1001=10000

(24)

若使用n個位元長度來表示有號整數,且以2’s補數 表示負數,則可以表示之有號整數之數值範圍:

正數:2

n-1

-1~0

( 011…1)

2

~(000…0)

2

負數:-2

n-1

~-1

( 111…1)

2

~(100…0)

2

-2

n-1

~2

n-1

-1

(25)

每三個二進位位元等於一個八進位位數。

Ex.:

(11 011 111)

2

=(337)

8

(26)

每四個二進位位元等於一個十六進位的位數。

Ex.:

(1101 1111)

2

=(CF)

16

參考文獻

相關文件

Experiment code often includes messy scripts for various settings in the paper – useful for reviewers Software: for general users. One or a few reasonable settings with a

Matrix factorization (MF) and its extensions are now widely used in recommender systems.. In this talk I will briefly discuss three research works related to

• tiny (a single segment, used by .com programs), small (one code segment and one data segment), medium (multiple code segments and a single data segment), compact (one code

• The first module, written in assembly language, contains the external procedure. • The second module contains the C/C++ code that starts and ends

• The Java programming language is based on the virtual machine concept. • A program written in the Java language is translated by a Java compiler into Java

◦ 含有指向任務狀態區段(task state segments)和指向區域 程式描述符表(local program descriptor tables)的指標。..  The register

How would this task help students see how to adjust their learning practices in order to improve?..

Such analysis enables valuable applications including social entity search en- gines and substitution recommendation systems. For a social entity search engine, existing work such