日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【微机原理笔记】第 4 章 - 8086 汇编语言程序设计

發(fā)布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【微机原理笔记】第 4 章 - 8086 汇编语言程序设计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

微機(jī)原理筆記 - 主頁

第 4 章 8086 匯編語言程序設(shè)計

1. 匯編語言的源程序

(1)編譯平臺的作用

  • 自動分配地址
  • 自動進(jìn)行數(shù)值轉(zhuǎn)化
  • 語法檢查

(2)匯編語言源程序的結(jié)構(gòu)

匯編語言源程序通常由一個或幾個程序模塊組成,每個模塊一般由三個邏輯段組成:

  • 數(shù)據(jù)段 —— 存放數(shù)據(jù)、變量
  • 堆棧段 —— 堆棧區(qū)域
  • 代碼段 —— 存放程序指令

EXE 模板:

(3)8086 匯編語言的語句

匯編語言由指令性語句指示性語句組成:

  • 指令性語句(真指令):匯編時生成機(jī)器碼。
  • 指示性語句(偽指令):匯編時不生成機(jī)器碼。

2. 8086 匯編中的偽指令

(1)符號定義語句

  • 等值語句(全局)

    格式: 符號名 EQU 表達(dá)式

    eg. PORT EQU 123

  • 等號語句(局部)

    格式: NUM = …

    注意: 用 EQU 定義的符號未清除前,不能重新定義;用 “=” 定義的符號可在任何時候進(jìn)行重定義。

(2)變量定義語句

格式: 符號名 DB/DW/DD 表達(dá)式

功能: 定義一變量,并為其分配一定數(shù)量的存儲單元。

  • 定義一組數(shù)據(jù)

    eg. BUFF DW 1234H,8EH

    定義一個字的變量,1234H 中 12 放到高地址,34 放到低地址;由于定義的是一個字,8EH 會變成 008EH ,其中 00 放到高地址,8E 放到低地址。

  • 定義一串字符

    eg. (考點)

    S1 DB ‘AB’ 是定義一個字節(jié),即 S1 = 41 , 42H

    S2 DW ‘AB’ 是定義一個字,即 S2 = 4241H ,將 A 放到高地址。

  • 定義保留存儲單元

    eg. SUM DW ?,?(SUM 偏移地址開始,4 個單元保留)

    操作數(shù) ?用來保存存儲空間,但不存入數(shù)據(jù)

  • 復(fù)制操作 —— DUP

    eg. ALL_ZERO DB 5 DUP(0) 等價于 ALL_ZERO DB 0,0,0,0,0

(3)段定義語句

  • 段定義

    段名 SEGMENT [定位類型] [組合方式] [類別]

    <匯編語言語句>

    段名 ENDS

    注意: 兩個偽指令總是成對出現(xiàn),前者說明一個段的開始,后者說明一個段的結(jié)束。

  • 段假設(shè)

    eg. ASSUME CS : code , DS : data , SS : stack

    上面語句意思是,CS 將指向名字為 code 的代碼段,DS 和 SS 將指向名字為 data/stack 的段。

  • 段賦值

    確定基址,但是 CS 不能賦值。

    eg. MOV AX , DATA ; MOV DS , AX

  • 段結(jié)束

    END 標(biāo)號名

    標(biāo)記匯編源程序的結(jié)束,匯編到此停止匯編。

3. DOS 功能調(diào)用

(1)鍵盤輸入 —— 1 號調(diào)用

格式:

MOV AH , 1

INT 21H

功能: 等待鍵盤輸入一個字符并將輸入的字符的 ASCII 碼送入 AL 中,同時在顯示器上顯示該字符。

(2)顯示單個字符 —— 2 號調(diào)用

格式:

MOV AH , 2

MOV DL , 帶顯示字符的 ASCII 碼

INT 21H

功能: 將 DL 中的字符顯示出來。

(3)顯示字符串 —— 9 號調(diào)用

格式:

LEA DX , 字符串首偏移地址

MOV AH , 9

INT 21H

功能: 顯示當(dāng)前數(shù)據(jù)區(qū)中以 $ 結(jié)尾的字符串。

(4)過程終止 —— 4CH 號調(diào)用

格式:

MOV AH , 4CH

INT 21H

功能: 結(jié)束當(dāng)前程序。

4. 數(shù)據(jù)項及表達(dá)式

(1)常用運算符

  • 算術(shù)運算符 —— + 、- 、* 、/ 、MOD

    eg. MOV AX , 4 * 1024 匯編后 MOV AX , 4096

  • 邏輯運算符 —— AND 、OR 、XOR 、NOT

    eg. MOV CL , 36H AND 0FH 匯編后 MOV CL , 06H

    考點: 不要把邏輯運算符與邏輯運算指令混淆。

    eg. AND AX , 3FC0H AND 0FF00H

    匯編后源操作數(shù)被翻譯為 3F00H ,所以上述指令與 AND AX , 3F00H 等價。

  • 關(guān)系運算符 —— EQ 、NE 、LT 、GT 、LE 、GE

    關(guān)系運算的結(jié)果是一個邏輯值:真或假

    關(guān)系為真,結(jié)果為全 1 ,關(guān)系為假,結(jié)果為全 0 。

    eg.

    MOV AX , 4 EQ 3 ; MOV AX , 0

    MOV AX , 4 NE 3 ; MOV AX , 0FFFFH

(2)其它操作符

  • 分析操作符

    • SEG 操作符

      eg. MOV AX , SEG BUFF

    • OFFSET 操作符

      eg. MOV BX , OFFSET BUFF

      考點(以下指令的異同):

      MOV BX , OFFSET BUFF

      LEA BX , BUFF

      上面前者是匯編時將偏移地址賦值給 BX ,而 LEA 是在 CPU 執(zhí)行時才賦值。

      eg. BUFF DB 01H , 02H , 03H

      ① MOV AX , BUFF (×) BUFF是三個字節(jié),不能賦給兩個字節(jié)的 AX

      ② MOV AL , BUFF ; MOV AL , BUFF[1]

      前者是將 BUFF 得第一個字節(jié)賦值給 AL ,后者是將第二個字節(jié)賦值給 AL

      ③ LEA BX , BUFF ; MOV AL , [BX] ; MOV AK , [BX+1]

      更推薦上面這些表達(dá)方式。

  • 綜合運算符

    功能: 用于指定其后儲存器操作數(shù)的類型。

    • PTR 運算符

      格式:<類型> PTR <地址操作數(shù)>

      類型包含 BYTE , WORD , DWORD , NEAR , FAR

      eg. 假設(shè) VAR 定義字變量

      MOV AL , VAR

      MOV AL , BYTE PTR VAR

    • ORG 偽指令

      ORG 規(guī)定了段內(nèi)的指令或數(shù)據(jù)存放的開始地址(偏移地址的初值),從此地址起連續(xù)存放程序或數(shù)據(jù)。

      格式: ORG <表達(dá)式>

      eg. OEG 100H

    • 地址計數(shù)器 $

      這個是匯編程序?qū)iT設(shè)置的一個表示當(dāng)前位置的計數(shù)器,正常情況下,匯編沒掃描一個字節(jié),位置計數(shù)器的值便加 1 。

      語句:

      ARRAY DW 1234H , 5678H

      COUNT EQU $ - ARRAY

      含義: COUNT 值就是 ARRAY 中數(shù)據(jù)所占的字節(jié)數(shù)。

      語句:

      JMP $

      含義: 程序跳轉(zhuǎn)到本條指令執(zhí)行,起到延時作用。

5. 過程定義和宏定義偽指令(中斷)

(1)過程定義語句

過程(子程序):一段具有特定功能的,供其它程序調(diào)用的公用程序。

【格式】

(2)調(diào)用 CALL

CALL 指令完成調(diào)用子程序的功能。

CALL 指令將程序的返回地址(CALL 的下一條指令地址)壓入堆棧中保存。斷點保護(hù),自動執(zhí)行。

如果是進(jìn)調(diào)用則將目標(biāo)的偏移地址等于 IP ,若為遠(yuǎn)調(diào)用則再將目標(biāo)的段地址等于 CS ,尋址和 JMP 相同。

如果是近調(diào)用,則堆棧中只保存返回地址的偏移地址;若是遠(yuǎn)調(diào)用,則還必須保存返回地址的段地址。

(3)RET n 指令

在子程序中,最后一條指令必須返回指令 RET ,它將堆棧中保存的返回地址自動彈出至 CS 和 IP 。

返回地址彈出后,它使 SP 值在正常返回之后的基礎(chǔ)上再加上 n(n 為偶數(shù))。

(4)子程序設(shè)計

重點:

  • 斷點保護(hù)通過調(diào)用CALL指令,返回RET指令自動執(zhí)行。(斷點保護(hù),自動運行)
    • 調(diào)用前要預(yù)先確定子程序中要使用哪些寄存器,并定義入口參數(shù)和出口參數(shù)。參數(shù)傳遞可利用寄存器、存儲單元或堆棧(要用BP尋址)
  • 進(jìn)入子程序后首先要保護(hù)主程序的運行狀態(tài),保護(hù)子程序使用的非參數(shù)寄存器(包括標(biāo)志位) (稱為保護(hù)現(xiàn)場),退出子程序前要恢復(fù)現(xiàn)場。(現(xiàn)場保護(hù),手動運行)

(5)宏定義偽指令

【格式】

eg.

宏定義與子程序的區(qū)別:宏定義是拿空間換時間。

(6)中斷指令和中斷返回指令

8086/8088 CPU 在程序中允許安排一條中斷指令來引起一個中斷過程,這種中斷叫內(nèi)部中斷,或叫軟中斷。被中斷的指令地址處稱為斷點

  • INT n

    中斷的分類:

    • INT 0 - INT 4 :專用中斷
    • INT 5 - INT 31H :備用中斷
    • INT 32 - INT 0FFH :用戶中斷
  • 入口地址

    格式: INT n

    入口地址的地址: n × 4

中斷和子程序的區(qū)別:

1、中斷里入口地址是固定的。

2、中斷里 FR 是自動保護(hù),而子程序是需要手動。

3、中斷的事件是隨機(jī)發(fā)生的,而子程序是調(diào)用發(fā)生的。

6. 匯編語言程序設(shè)計

(1)常用匯編語言程序框架 (考點)

(1)匯編語言程序設(shè)計基本步驟(匯編面試高頻題)

1、分析問題,確定模型

2、確定算法

3、繪制流程圖 → 程序結(jié)構(gòu)

4、編寫程序

5、檢查和調(diào)試

總結(jié)

以上是生活随笔為你收集整理的【微机原理笔记】第 4 章 - 8086 汇编语言程序设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。