當前位置:編程學習大全網 - 編程語言 - 如何學習匯編啊

如何學習匯編啊

1. 學匯編的方法

應該具備的條件:--微機(80X86型微機) --MSDOS操作系統或Win95/98的 "MS-DOS方式" -- 編程工具: 文本編輯器: 如 MS-DOS 的 EDIT

匯編器: 如 MASM.EXE 5.0 版本

連接器: 如 LINK.EXE

二進制轉換: 如 EXE2BIN.EXE

學習匯編語言實踐性很強。只有經過編寫大量代碼才能熟練掌握。此外閱讀源程序也很有幫助。

由於匯編語言是與 CPU 芯片緊密相關的,所以必須針對某壹機型,清楚地了解 CPU 芯片及其外圍

設備的硬件資料。只有這樣,編寫代碼才能得心應手。所以有兩類資料需要妳去積累:壹類是硬件

方面的資料和系統軟件方面的資料,另壹類是算法方面的經驗。其他比如匯編工具等則沒有多少東

西需要深究。

第壹類資料,比如 各種 BIOS 中斷,MS-DOS 功能調用,Windows API 庫,這些可以歸為系統

軟件方面;而 CPU 結構,端口定義,中斷定義,總線方式等可歸為硬件資料。

第二類資料,比如排序算法,字符串查找算法等。像搜索引擎所采用的算法,能在最短的時間

內,找出符合條件的信息,而且還帶有智能性。這種查找方案包含了很科學的算法。它們都是抽象

的東西。

總之,學習匯編,妳應該目的明確,而且目標機器明確,要解決的問題也明確。這樣才能有

的放矢,最終有所收獲。

2 匯編語言基礎 基本指令

我們學習的對象機器是 PC 機,CPU 是 Intel80x86,所以先熟悉 CPU 的大致結構。

其實經常用到的是 CPU 的各個寄存器,其他比如引腳,內部結構等,開始時先不去管它。

由於Intel80x86 各版本 CPU 新的與舊的保持兼容,舊的 CPU 下設計的程序無需任何修改就能在

新的CPU 下運行。Intel 8086/8088 的 所有寄存器在後來的 新版本 CPU 中都保持。它們也是最

基本的 CPU 寄存器。 所以主要學習 Intel 8086 CPU 的寄存器:

加法器 AX (AH/AL)乘法,除法,I/O, 快速的算術運算

基址寄存器BX (BH/BL) 基址指針 (數據段)

計數器CX (CH/CL) 循環,重復或位移的計數器

數據寄存器DX (DH/DL) 乘法,除法,I/O

源索引SI 源串和索引指針

目標索引DI 目標串和索引指針

基址指針BP 棧的基址指針

棧指針SP 棧的當前位置指針

標誌 CPU 標誌

指令指針IP 當前指令的內存位置

代碼段CS 程序代碼段值

數據段DS 程序數據段值

棧段SS 棧操作的段值

附加段ES 程序附加數據段的段值

其中 CPU 標誌寄存器各位的含義如下:

FLAG: (相應的 BIT 為 1 時的含義)

CF進位位向目標操作數進位或借位

PF奇偶校驗位 低字節校驗結果為偶校驗

AF輔助進位標誌低 4 bits 的進位或借位標誌

ZF零標誌結果為零

SF負數標誌結果為負數

TF單步標誌(CPU)轉為單步狀態

IF中斷標誌中斷響應打開 (清除時關閉)

DF方向 字串操作默認向下(down rather than up)

OF溢出 結果過大或過小(for destination) 匯編語言指令主要就是對上述各個寄存器的操作。下面這段代碼是壹個完整的 COM 型可執行

程序文件的代碼,經過編譯,連接和轉換後,能直接執行,結果是在彩色背景下顯示壹些字符。

編譯後只有204 Bytes。

(妳需要把這段代碼完整地復制下來並另存為壹個以 ASM為擴展名的文件,例如 mypro1.asm。

然後對它進行編譯連結和轉換,就生成壹個名為 mypro1.COM 的可執行文件。妳只要在 DOS 命令行

敲入 mypro1 加回車就能看到它的執行結果。關於如何編譯連結等問題以後再說。妳先可以在匯編

工作室主頁上下載簡裝工具,使用其中的 TOCOM.BAT [filename] 批處理即可順利生成COM文件。)

在這個例子中使用了幾類指令:

mov 寄存器,立即數;數據傳輸類

mov 內存,寄存器 ;數據傳輸類

push 寄存器 ;堆棧操作: 入棧

pop 寄存器 ;堆棧操作: 出棧

int 10H ;10H 號 中斷 (視頻)

int 21H ;21H 號 中斷 (功能調用)

除了這些指令外,還看到:

assume ;假定

offset ;求偏量

ORG ;地址定位

byte ptr;字節屬性

db;定義字節,內存分配

在壹個完整的匯編源程序中,壹般包括上述兩類內容,它們分別是指令和匯編偽操作,

它們是構成源程序必不可少的成分。這些指令和匯編偽操作在用法上有許多細節,需要通

過具體的程序舉例來逐步掌握。;運行環境: MS-DOS 或 Windows98 的 MS-DOS 方式

;硬件條件: 安裝有 VGA 或更新的顯示適配器

;這是命令文件 (COM) 格式的程序結構,

stackseg segment stack

stackseg ends

codeseg segment

assume ss:codeseg

assume cs:codeseg

ORG 100H

Entry: mov ah,0fH;取當前顯示模式

int 10

mov byte ptr cs:vMode,al

mov byte ptr cs:vPage,b

mov ah,00

mov al,03

int 10H ;設置顯示模式: 3

mov ah,05

mov al,00

int 10H ;設置當前顯示頁: 0

mov ah,06H

mov ch,00

mov cl,00

mov dh,24

mov dl,79

mov bh,63

mov al,00

int 10H ;清屏操作(用以指定色彩)

mov ah,06H

mov ch,10

mov cl,20

mov dh,15

mov dl,50

mov bh,00

mov al,00

int 10H ;清除指定屏幕區域(用以指定色彩) mov ah,06H

mov ch,09

mov cl,22

mov dh,14

mov dl,52

mov bh,79

mov al,00

int 10H ;清除指定屏幕區域(用以指定色彩)

mov ah,02

mov dh,11

mov dl,30

mov bh,00

int 10H ;定位光標: 11,30

mov ah,09

mov dx,offset cs:string1

push cs

pop ds

int 21H ;顯示壹串字符

mov ah,02

mov dh,13

mov dl,30

mov bh,00

int 10H;定位光標: 13,30

mov ah,09

mov dx,offset cs:string2

int 21H;顯示壹串字符

mov ah,02

mov dh,25

mov dl,00

mov bh,00

int 10H;定位光標:25,00(即隱藏光標)

mov ah,00

int 16H;等待鍵盤輸入

mov ah,00

mov al,byte ptr cs:vMode

int 10H;恢復顯示模式

mov ah,05

mov al,byte ptr cs:vPage

int 10H;恢復當前顯示頁

mov ah,02

mov dh,24

mov dl,00

mov bh,00

int 10H;恢復光標: 24,00

mov ah,06H

mov ch,00

mov cl,00

mov dh,24

mov dl,79

mov bh,07

mov al,00

int 10H ;清屏 mov ax,4c00H

int 21H ;結束程序,返回 MS-DOS 提示符

String1 db 'Can you see it?$'

String2 db 'Any key to exit$'

vMode db ?

vPage db ?

codeseg ends

end Entry ----------------------------------------------------------------------------------------

  • 上一篇:Android高級編程書籍目錄
  • 下一篇:中國最好的程序員。
  • copyright 2024編程學習大全網