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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

微机基础

發(fā)布時(shí)間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微机基础 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

微機(jī)概述

微機(jī)的發(fā)展概況

微機(jī)發(fā)展

  • 1946年美國賓夕法尼亞大學(xué)為了彈道設(shè)計(jì)的需要設(shè)計(jì)了世界上第一臺數(shù)字電子計(jì)算機(jī)ENIAC。
  • 1971年,Intel研究制造了I4004微處理器芯片。該芯片能同時(shí)處理4位二進(jìn)制數(shù),集成了2300個(gè)晶體管,每秒可進(jìn)行6萬次運(yùn)算,成本約為200美元。它是世界上第一個(gè)微處理器芯片,以它為核心組成的MCS-4計(jì)算機(jī),標(biāo)志了世界第一臺微型計(jì)算機(jī)的誕生。

微機(jī)相關(guān)幾個(gè)的概念

  • 什么是微機(jī)?
    微機(jī)是以大規(guī)模、超大規(guī)模構(gòu)成的微處理器作為核心,配以存儲器、輸入/輸出接口電路及系統(tǒng)總路線所制造出的計(jì)算機(jī)。
  • 劃分階段的標(biāo)志: 字長 和 微處理器型號
  • 微機(jī)發(fā)展的特點(diǎn)
    • 速度 越來越快
    • 容量 越來越大
    • 功能 越來越強(qiáng)
  • 在微機(jī)的發(fā)展過程中,最為成功也最有影響力的是IBM PC系列微機(jī)
  • 微機(jī)的體系結(jié)構(gòu):
    馮.諾依曼建立的存儲程序概念——馮.諾依曼結(jié)構(gòu)
    • 馮·諾依曼結(jié)構(gòu)也稱普林斯頓結(jié)構(gòu),是一種將程序指令存儲器和數(shù)據(jù)存儲器合并在一起的存儲器結(jié)構(gòu)。程序指令存儲地址和數(shù)據(jù)存儲地址指向同一個(gè)存儲器的不同物理位置,因此程序指令和數(shù)據(jù)的寬度相同,如英特爾公司的8086中央處理器的程序指令和數(shù)據(jù)都是16位寬。
    • 數(shù)學(xué)家馮·諾依曼提出了計(jì)算機(jī)制造的三個(gè)基本原則,即采用二進(jìn)制邏輯程序存儲執(zhí)行以及計(jì)算機(jī)由五個(gè)部分組成(運(yùn)算器、控制器、存儲器、輸入設(shè)備、輸出設(shè)備),這套理論被稱為馮·諾依曼體系結(jié)構(gòu)。(來源維基百科)

微機(jī)的分層存儲系統(tǒng)

存儲器可分為5層:
  • 0層通常是CPU內(nèi)部寄存器,離CPU最近,存取速度快,但數(shù)量有限.
  • 1層存儲器是高速緩沖存儲器Cache
  • 2層是主存儲器,通常由動態(tài)RAM(DRAM)組成
  • 3層是大容量的虛擬存儲器(磁盤存儲器)
  • 4層是外存儲器(光存儲介質(zhì)等)

軟件系統(tǒng)的發(fā)展

常見操作系統(tǒng):
  • DOS
  • Windows
  • Linux
  • UNIX/Xenix
  • OS/2
  • Netware

單片機(jī)

單片機(jī)是把CPU、一定容量的存儲器和必要的I/O接口電路集成在一個(gè)芯片上構(gòu)成的具有計(jì)算機(jī)的完整功能的一種微機(jī)。

微機(jī)的應(yīng)用

1.工業(yè)控制
2.事物處理
3.計(jì)算機(jī)輔助設(shè)計(jì)和輔助制造(CAD/CAM)
4.教學(xué)培訓(xùn)
5.家庭娛樂和家政事務(wù)管理
6.科學(xué)和工程計(jì)算
7.人工智能

計(jì)算機(jī)中數(shù)的表示和編碼

計(jì)算機(jī)中的進(jìn)位計(jì)數(shù)制

進(jìn)位計(jì)數(shù)制的表示法

十進(jìn)制表示法

十進(jìn)制數(shù)是用0,1,2,…,8,9十個(gè)不同的符號來表示數(shù)值,它采用的是“逢十進(jìn)一,借一當(dāng)十”的原則。

二進(jìn)制表示法

基數(shù)為10的記數(shù)制叫十進(jìn)制;基數(shù)為2的記數(shù)制叫做二進(jìn)制。
二進(jìn)制數(shù)的計(jì)算規(guī)則是“逢二進(jìn)一,借一當(dāng)二”。

八進(jìn)制表示法

八進(jìn)制數(shù)是基數(shù)為八的計(jì)數(shù)制。八進(jìn)制數(shù)主要采用0,1,2,…,7這八個(gè)阿拉伯?dāng)?shù)字。
八進(jìn)制數(shù)的運(yùn)算規(guī)則為“逢八進(jìn)一,借一當(dāng)八”。
八進(jìn)制表示數(shù)值方法如下:
例:$$(467.6)_0=4 \times 8^2+6 \times 8^1+7 \times 8^0+6 \times 8^{-1}$$

十六進(jìn)制表示法

基數(shù)為16,用0 – 9 、A – F 十五個(gè)字符來數(shù)值,逢十六進(jìn)一。
各位的權(quán)值為 16^I
十六進(jìn)制表示數(shù)值方法如下:
例:$$(56D.3)_H=5 \times 16^2+6 \times 16^1+13 \times 16^0+3 \times 16^{-1}$$

進(jìn)位計(jì)數(shù)制之間的轉(zhuǎn)換

二 → 十

二進(jìn)制數(shù)從低位到高位(即從右往左)計(jì)算,第0位的權(quán)值是2的0次方,第1位的權(quán)值是2的1次方,第2位的權(quán)值是2的2次方,依次遞增下去,把最后的結(jié)果相加的值就是十進(jìn)制的值。

八 → 十

八進(jìn)制數(shù)從低位到高位(即從右往左)計(jì)算,第0位的權(quán)值是8的0次方,第1位的權(quán)值是8的1次方,第2位的權(quán)值是8的2次方,依次遞增下去,把最后的結(jié)果相加的值就是十進(jìn)制的值。

十六 → 十

十六進(jìn)制數(shù)從低位到高位(即從右往左)計(jì)算,第0位的權(quán)值是16的0次方,第1位的權(quán)值是16的1次方,第2位的權(quán)值是16的2次方,依次遞增下去,把最后的結(jié)果相加的值就是十進(jìn)制的值。

十 → 二

除2取余法,即每次將整數(shù)部分除以2,余數(shù)為該位權(quán)上的數(shù),而商繼續(xù)除以2,余數(shù)又為上一個(gè)位權(quán)上的數(shù),這個(gè)步驟一直持續(xù)下去,直到商為0為止,最后讀數(shù)時(shí)候,從最后一個(gè)余數(shù)讀起,一直到最前面的一個(gè)余數(shù)。

十 → 八
  • 方法1
    除8取余法,即每次將整數(shù)部分除以8,余數(shù)為該位權(quán)上的數(shù),而商繼續(xù)除以8,余數(shù)又為上一個(gè)位權(quán)上的數(shù),這個(gè)步驟一直持續(xù)下去,直到商為0為止,最后讀數(shù)時(shí)候,從最后一個(gè)余數(shù)起,一直到最前面的一個(gè)余數(shù)。
  • 方法2
    使用間接法,先將十進(jìn)制轉(zhuǎn)換成二進(jìn)制,然后將二進(jìn)制又轉(zhuǎn)換成八進(jìn)制。
十 → 十六
  • 方法1
    除16取余法,即每次將整數(shù)部分除以16,余數(shù)為該位權(quán)上的數(shù),而商繼續(xù)除以16,余數(shù)又為上一個(gè)位權(quán)上的數(shù),這個(gè)步驟一直持續(xù)下去,直到商為0為止,最后讀數(shù)時(shí)候,從最后一個(gè)余數(shù)起,一直到最前面的一個(gè)余數(shù)。
  • 方法2
    使用間接法,先將十進(jìn)制轉(zhuǎn)換成二進(jìn)制,然后將二進(jìn)制又轉(zhuǎn)換成十六進(jìn)制。
二 → 八

取三合一法,即從二進(jìn)制的小數(shù)點(diǎn)為分界點(diǎn),向左(向右)每三位取成一位,接著將這三位二進(jìn)制按權(quán)相加,然后,按順序進(jìn)行排列,小數(shù)點(diǎn)的位置不變,得到的數(shù)字就是我們所求的八進(jìn)制數(shù)。如果向左(向右)取三位后,取到最高(最低)位時(shí)候,如果無法湊足三位,可以在小數(shù)點(diǎn)最左邊(最右邊),即整數(shù)的最高位(最低位)添0,湊足三位。

八 → 二

取一分三法,即將一位八進(jìn)制數(shù)分解成三位二進(jìn)制數(shù),用三位二進(jìn)制按權(quán)相加去湊這位八進(jìn)制數(shù),小數(shù)點(diǎn)位置照舊。

二 → 十六

取四合一法,即從二進(jìn)制的小數(shù)點(diǎn)為分界點(diǎn),向左(向右)每四位取成一位,接著將這四位二進(jìn)制按權(quán)相加,然后,按順序進(jìn)行排列,小數(shù)點(diǎn)的位置不變,得到的數(shù)字就是我們所求的十六進(jìn)制數(shù)。如果向左(向右)取四位后,取到最高(最低)位時(shí)候,如果無法湊足四位,可以在小數(shù)點(diǎn)最左邊(最右邊),即整數(shù)的最高位(最低位)添0,湊足四位。

十六 → 二

取一分四法,即將一位十六進(jìn)制數(shù)分解成四位二進(jìn)制數(shù),用四位二進(jìn)制按權(quán)相加去湊這位十六進(jìn)制數(shù),小數(shù)點(diǎn)位置照舊。

十六 <-> 八

利用二進(jìn)制實(shí)現(xiàn)轉(zhuǎn)換

計(jì)算機(jī)中常用的編碼

BCD碼

BCD碼(Binary-Coded Decimal?),用4位二進(jìn)制數(shù)來表示1位十進(jìn)制數(shù)中的0~9這10個(gè)數(shù)碼,是一種二進(jìn)制的數(shù)字編碼形式,用二進(jìn)制編碼的十進(jìn)制代碼。BCD碼這種編碼形式利用了四個(gè)位元來儲存一個(gè)十進(jìn)制的數(shù)碼,使二進(jìn)制和十進(jìn)制之間的轉(zhuǎn)換得以快捷的進(jìn)行。

ASCII碼 -美國標(biāo)準(zhǔn)信息交換代碼

ASCII ((American Standard Code for Information Interchange): 美國信息交換標(biāo)準(zhǔn)代碼)是基于拉丁字母的一套電腦編碼系統(tǒng),主要用于顯示現(xiàn)代英語和其他西歐語言。它是最通用的信息交換標(biāo)準(zhǔn),并等同于國際標(biāo)準(zhǔn)ISO/IEC 646。ASCII第一次以規(guī)范標(biāo)準(zhǔn)的類型發(fā)表是在1967年,最后一次更新則是在1986年,到目前為止共定義了128個(gè)字符。

帶符號數(shù)的表示

數(shù)的表示

數(shù)的常用表示法:原碼、反碼、補(bǔ)碼

機(jī)器數(shù)和真值
  • 機(jī)器數(shù)
    一個(gè)數(shù)在計(jì)算機(jī)中的二進(jìn)制表示形式, 叫做這個(gè)數(shù)的機(jī)器數(shù)。機(jī)器數(shù)是帶符號的,在計(jì)算機(jī)用一個(gè)數(shù)的最高位存放符號, 正數(shù)為0, 負(fù)數(shù)為1。
    比如,十進(jìn)制中的數(shù) +3 ,計(jì)算機(jī)字長為8位,轉(zhuǎn)換成二進(jìn)制就是00000011。如果是 -3 ,就是 10000011 。那么,這里的 00000011 和 10000011 就是機(jī)器數(shù)。
  • 真值
    因?yàn)榈谝晃皇欠栁?#xff0c;所以機(jī)器數(shù)的形式值就不等于真正的數(shù)值。例如上面的有符號數(shù) 10000011,其最高位1代表負(fù),其真正數(shù)值是 -3 而不是形式值131(10000011轉(zhuǎn)換成十進(jìn)制等于131)。所以,為區(qū)別起見,將帶符號位的機(jī)器數(shù)對應(yīng)的真正數(shù)值稱為機(jī)器數(shù)的真值。
    例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1
原碼

原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其余位表示值. 比如如果是8位二進(jìn)制:

[+1]原 = 0000 0001 [-1]原 = 1000 0001

第一位是符號位. 因?yàn)榈谝晃皇欠栁? 所以8位二進(jìn)制數(shù)的取值范圍就是:

[1111 1111 , 0111 1111]

即:

[-127 , 127]
反碼

反碼的表示方法是:

  • 正數(shù)的反碼是其本身
  • 負(fù)數(shù)的反碼是在其原碼的基礎(chǔ)上, 符號位不變,其余各個(gè)位取反.
[+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反
補(bǔ)碼

補(bǔ)碼的表示方法是:

  • 正數(shù)的補(bǔ)碼就是其本身
  • 負(fù)數(shù)的補(bǔ)碼是在其原碼的基礎(chǔ)上, 符號位不變, 其余各位取反,
    最后+1. (即在反碼的基礎(chǔ)上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補(bǔ) [-1] = [10000001]原 = [11111110]反 = [11111111]補(bǔ)

為什么使用原碼反碼補(bǔ)碼

已知:計(jì)算機(jī)可以有三種編碼方式表示一個(gè)數(shù). 對于正數(shù)因?yàn)槿N編碼方式的結(jié)果都相同:

[+1] = [00000001]原 = [00000001]反 = [00000001]補(bǔ)

對于復(fù)數(shù):

[-1] = [10000001]原 = [11111110]反 = [11111111]補(bǔ)

可見原碼, 反碼和補(bǔ)碼完全不同。
對于計(jì)算機(jī), 加減乘除是最基礎(chǔ)的運(yùn)算, 要設(shè)計(jì)的盡量簡單。于是人將符號位也參與運(yùn)算。 根據(jù)運(yùn)算法則減去一個(gè)正數(shù)等于加上一個(gè)負(fù)數(shù), 即: 1-1 = 1 + (-1) = 0 , 所以機(jī)器可以只有加法而沒有減法, 這樣計(jì)算機(jī)運(yùn)算的設(shè)計(jì)就更簡單了。
計(jì)算十進(jìn)制的表達(dá)式: 1-1=0
首先看原碼:

1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2

如果用原碼表示, 讓符號位也參與計(jì)算, 顯然對于減法來說, 結(jié)果是不正確的.這也就是為何計(jì)算機(jī)內(nèi)部不使用原碼表示一個(gè)數(shù).
為了解決原碼做減法的問題, 出現(xiàn)了反碼:

1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

發(fā)現(xiàn)用反碼計(jì)算減法, 結(jié)果的真值部分是正確的. 而唯一的問題其實(shí)就出現(xiàn)在"0"這個(gè)特殊的數(shù)值上. 雖然人們理解上+0和-0是一樣的, 但是0帶符號是沒有任何意義的. 而且會有[0000 0000]原和[1000 0000]原兩個(gè)編碼表示0.
于是使用補(bǔ)碼, 解決了0的符號以及兩個(gè)編碼的問題:

1-1 = 1 + (-1) = [0000 0001]原+[1000 0001]原=[0000 0001]補(bǔ)+[1111 1111]補(bǔ)=[0000 0000]補(bǔ)=[0000 0000]原

這樣0用[0000 0000]表示, 而以前出現(xiàn)問題的-0則不存在了.而且可以用[1000 0000]表示-128:

(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]補(bǔ) + [1000 0001]補(bǔ) = [1000 0000]補(bǔ)

(-1-127)的結(jié)果應(yīng)該是-128, 在用補(bǔ)碼運(yùn)算的結(jié)果中, [1000 0000]補(bǔ) 就是-128. 但是注意因?yàn)閷?shí)際上是使用以前的-0的補(bǔ)碼來表示-128, 所以-128并沒有原碼和反碼表示.(對-128的補(bǔ)碼表示[1000 0000]補(bǔ)算出來的原碼是[0000 0000]原, 這是不正確的)
使用補(bǔ)碼, 不僅僅修復(fù)了0的符號以及存在兩個(gè)編碼的問題, 而且還能夠多表示一個(gè)最低數(shù). 這就是為什么8位二進(jìn)制, 使用原碼或反碼表示的范圍為[-127, +127], 而使用補(bǔ)碼表示的范圍為[-128, 127].
因?yàn)闄C(jī)器使用補(bǔ)碼, 所以對于編程中常用到的32位int類型, 可以表示范圍是: [-231, 231-1] 因?yàn)榈谝晃槐硎镜氖欠栁?而使用補(bǔ)碼表示時(shí)又可以多保存一個(gè)最小值.

微機(jī)的一般概念

計(jì)算機(jī)的基本組成和工作原理

計(jì)算機(jī)的基本組成:運(yùn)算器、控制器、存儲器、以及輸入和輸出設(shè)備

微處理器(CPU)

CPU是大規(guī)模集成電路技術(shù)做成的芯片,芯片內(nèi)集成有控制器、運(yùn)算器和寄存器等相關(guān)部件,完成對計(jì)算機(jī)系統(tǒng)內(nèi)各部件進(jìn)行統(tǒng)一協(xié)調(diào)和控制。
包括:寄存器陣列(RS)算術(shù)和邏輯運(yùn)算單元(ALU)控制器內(nèi)部總線及緩沖器

  • 控制器:根據(jù)程序中的命令發(fā)出各種控制信號,使各部分協(xié)調(diào)工作以完成指令所要求的各種操作。
  • 運(yùn)算器:對信息進(jìn)行加工、運(yùn)算的部件,執(zhí)行算術(shù)運(yùn)算和邏輯運(yùn)算。
存儲器

功能:存放程序和數(shù)據(jù)。
存儲器=內(nèi)存+外存。


內(nèi)存是半導(dǎo)體存儲器,外存通常是指光盤,硬盤等可長期保存信息。
半導(dǎo)體存儲器包含RAM和ROM。
  • RAM:隨機(jī)讀寫存儲器(random access memory)。
    RAM主要用來存放各種數(shù)據(jù),中間結(jié)果以及外存交換信息和作
    為堆棧。程序運(yùn)行的時(shí)候通常從外存讀入內(nèi)存ram中,然后再
    由cpu從ram中讀取并運(yùn)行。
    • Sram靜態(tài)存儲器,cache。
    • Dram動態(tài)存儲器用于主存。SDRAM:Synchronous
    • Dynamic Random Access Memory,同步動態(tài)隨機(jī)存儲器。
  • Rom:只讀存儲器(read only memory)。
  • Flash memory:閃速存儲器,又叫閃存,是一種特殊的rom。
    每一個(gè)存儲單元有一個(gè)確定的地址

    注意: 存儲單元的地址和該地址單元中存放的內(nèi)容是兩個(gè)不同的概念。

I/O設(shè)備和I/O接口

I/O設(shè)備:微機(jī)配備的輸入/輸出設(shè)備(外設(shè))。

存儲程序工作原理

把編制好的程序和數(shù)據(jù)一起先送入存儲器中保存起來。啟動機(jī)器運(yùn)行后,根據(jù)給出的程序中第一條指令的存儲地址,控制器就可以根據(jù)存儲程序中的程序周而復(fù)始的取出指令、分析指令、執(zhí)行指令,直至完成全部指令操作,即控制器通過指令流的串行驅(qū)動實(shí)現(xiàn)程序控制。

名詞術(shù)語

  • 微處理器:是將運(yùn)算器和控制器做在一塊集成電路上的一個(gè)獨(dú)立部件。它具有解釋指令、執(zhí)行指令和與外界交換數(shù)據(jù)的能力。
  • 微機(jī):通過總線把I/O、CPU和半導(dǎo)體存儲器有機(jī)結(jié)合在一起。
    微機(jī)分為:單板機(jī)(印制電路板)、單片機(jī)(芯片)、多板機(jī)。
  • 微機(jī)系統(tǒng):微機(jī)配上外部設(shè)備、系統(tǒng)電源和系統(tǒng)軟件就構(gòu)成微機(jī)系統(tǒng)。
  • 微機(jī)多機(jī)系統(tǒng):多臺微機(jī)/微處理器組合而成。
  • 微機(jī)開發(fā)系統(tǒng)(MDS):在研制開發(fā)微機(jī)應(yīng)用系統(tǒng)時(shí),從程序調(diào)試到樣機(jī)的系統(tǒng)調(diào)試,他都能提供軟件和硬件的支持
  • 計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng):借助通信網(wǎng)絡(luò)將一定的域內(nèi)的眾多計(jì)算機(jī)和外設(shè)連接起來構(gòu)成計(jì)算機(jī)網(wǎng)絡(luò)可以實(shí)現(xiàn)計(jì)算機(jī)之間的互相通信和資源共享。
  • 多媒體:文、圖、聲、像等單媒體與計(jì)算機(jī)程序融合在一起形成的信息傳播媒體。

微機(jī)結(jié)構(gòu)-微機(jī)的結(jié)構(gòu)是一種總線結(jié)構(gòu)

總線(Bus)是計(jì)算機(jī)各種功能部件之間傳送信息的公共通信干線,它是由導(dǎo)線組成的傳輸線束, 按照計(jì)算機(jī)所傳輸?shù)男畔⒎N類,計(jì)算機(jī)的總線可以劃分為數(shù)據(jù)總線、地址總線和控制總線,分別用來傳輸數(shù)據(jù)、數(shù)據(jù)地址和控制信號。

  • 計(jì)算機(jī)的各個(gè)部件掛在總線上,總線使得計(jì)算機(jī)功能部件之間的相互關(guān)系變成各個(gè)功能部件面向總線的單一關(guān)系。
  • 優(yōu)點(diǎn):
    • 結(jié)構(gòu)簡單
    • 擴(kuò)展維護(hù)方便

系統(tǒng)總線

從處理器引出的若干信號線,CPU通過它們與存儲器或I/O設(shè)備進(jìn)行信息交換。一個(gè)部件只要滿足總線標(biāo)準(zhǔn),就可以連接到采用這種總線標(biāo)準(zhǔn)的系統(tǒng)中。
系統(tǒng)總線分為:

  • 地址總線
  • 控制總線
  • 數(shù)據(jù)總線

地址總線

傳遞地址信息的總線,即AB。CPU在地址總線上輸出將要訪問的內(nèi)存單元或I/O端口的地址,該總線為單向總線。

內(nèi)存容量的計(jì)算:
  • 16條地址線可訪問$2^{16} = 65536B = 64 KB$
  • 20條地址線可訪問$2^{20} = 1 MB$
  • 1K = 1024B 1M = 1024 KB 1G = 1024 MB

控制總線

傳遞控制信息的總線,即CB。
一部分是從CPU輸出:通過對指令的譯碼,由CPU內(nèi)部產(chǎn)生,由CPU送到存儲器、輸入/輸出接口電路和其它部件。如讀寫控制信號等。
另一部分是由系統(tǒng)中的其他外設(shè)產(chǎn)生,送往CPU,如:中斷請求信號、總線請求信號、狀態(tài)信號。

數(shù)據(jù)總線

傳遞數(shù)據(jù)信息的總線,即DB。
在CPU進(jìn)行讀操作時(shí),內(nèi)存或外設(shè)的數(shù)據(jù)通過數(shù)據(jù)總線送往CPU;
在CPU進(jìn)行寫操作時(shí),CPU數(shù)據(jù)通過數(shù)據(jù)總線送往內(nèi)存或外設(shè),數(shù)據(jù)總線是雙向總線。

微機(jī)的工作過程

準(zhǔn)備

  • 1、編寫程序(源程序);
  • 2、將源程序匯編或編譯成計(jì)算機(jī)能識別的機(jī)器語言程序;
  • 3、將數(shù)據(jù)和程序放入存儲器中存放。

取指令階段的執(zhí)行過程:(設(shè)程序從00H開始存放)

  • 1、將程序計(jì)數(shù)器(PC或IP)的內(nèi)容送地址寄存器AR。
  • 2、程序計(jì)數(shù)器PC的內(nèi)容自動加1變?yōu)?1H,為取下一條指令作好準(zhǔn)備。
  • 3、地址寄存器AR將00H通過地址總線送至存儲器地址譯碼器譯碼,選中00H單元。
  • 4、CPU發(fā)出“讀”命令。
  • 5、所選中的00單元的內(nèi)容B0H讀至數(shù)據(jù)總線DB上。
  • 6、經(jīng)數(shù)據(jù)總線DB,讀出的B0H送至數(shù)據(jù)寄存器DR。
  • 7、數(shù)據(jù)寄存器DR將其內(nèi)容送至指令寄存器IR中,經(jīng)過譯碼CPU“識別”出這個(gè)操作碼為“MOV A,05H”指令,于是控制器發(fā)出執(zhí)行這條指令的各種控制命令。

執(zhí)行指令階段的執(zhí)行過程:

  • 1、將程序計(jì)數(shù)器(PC或IP)的內(nèi)容送地址寄存器AR。
  • 2、程序計(jì)數(shù)器PC的內(nèi)容自動加1變?yōu)?2H,為取下一條指令作好準(zhǔn)備。
  • 3、地址寄存器AR將01H通過地址總線送至存儲器地址譯碼器譯碼,選中01H單元。
  • 4、CPU發(fā)出“讀”命令。
  • 5、所選中的01H單元的內(nèi)容05H讀至數(shù)據(jù)總線DB上。
  • 6、經(jīng)數(shù)據(jù)總線DB,讀出的05H送至數(shù)據(jù)寄存器DR。
  • 7、由控制碼計(jì)算機(jī)已知到讀出的是立即數(shù),并要求將它送入累加

計(jì)算機(jī)軟件系統(tǒng)

系統(tǒng)軟件和應(yīng)用軟件系統(tǒng)軟件包括操作系統(tǒng)、各種高級語言處理程序、編譯系統(tǒng)和其他服務(wù)程序、數(shù)據(jù)庫管理系統(tǒng)等軟件。這些軟件不是用來解決具體應(yīng)用問題的,而是利用計(jì)算機(jī)自身的功能,合理的組織解題流程,管理計(jì)算機(jī)軟、硬件各種資源,提供人-機(jī)間的接口,從而簡化或代替各環(huán)節(jié)中人所承擔(dān)的工作。還可以為用戶使用機(jī)器提供方便,擴(kuò)大機(jī)器功能,提高工作效率。應(yīng)用軟件是由用戶利用計(jì)算機(jī)及其系統(tǒng)軟件編制的解決實(shí)際應(yīng)用問題的程序。

Intel微處理器結(jié)構(gòu)

8086的功能結(jié)構(gòu)/編程結(jié)構(gòu)

Intel 8086 微處理器有16位寄存器和16位外部數(shù)據(jù)總線,20位地址總線,尋址為1MB的地址空間。Intel 8088 微處理器的外部數(shù)據(jù)總線為8位,其他與8086是一樣的。


8086 CPU從功能上劃分成兩部分:總線接口單元BIU(Bus Interface Unit)和執(zhí)行單元EU(Execution Unit).
BIU根據(jù)EU的請求,將指令送到指令流隊(duì)列中排隊(duì),為EU提供即將執(zhí)行的指令;EU從BIU的指令隊(duì)列取得的指令和數(shù)據(jù),來對片外操作數(shù)(片外就是指CPU以外存儲數(shù)據(jù)的地方,比如存儲器,IO接口等)進(jìn)行訪問的。這樣EU與BIU可獨(dú)立工作,BIU在保證EU與片外傳輸操作數(shù)的前提下,可進(jìn)行指令預(yù)取,與EU可重疊操作。取指部分與執(zhí)行部分可分開進(jìn)行,提高CPU的利用率。(8086指令隊(duì)列出現(xiàn)2個(gè)空字節(jié),且EU未占總線,BIU自動取指令填充隊(duì)列。)
  • BIU作為總線控制單元,負(fù)責(zé)與存儲器及IO接口來傳輸數(shù)據(jù)。
    • BIU的組成部分:段寄存器組(CS,DS,SS,ES)、指令指針(IP)、地址加法器、指令隊(duì)列緩沖器、總線接口控制邏輯。
  • EU作為執(zhí)行單元,負(fù)責(zé)執(zhí)行指令。
    • EU的組成部分:16位通用寄存器組(AX,BX,CX,DX,SP,BP,SI,DI)、算術(shù)邏輯單元(ALU)、標(biāo)志寄存器(FLAG)、操作控制器電路。

BIU

1.段寄存器組(CS,DS,SS,ES)
  • CS:代碼段寄存器,存放當(dāng)前將被執(zhí)行的程序的段地址。
  • DS:數(shù)據(jù)段寄存器,存放當(dāng)前被執(zhí)行的程序所用操作數(shù)的段地址。
  • SS:堆棧段寄存器,存放當(dāng)前被執(zhí)行的程序所用堆棧的段地址。
  • ES:附加段寄存器,存放當(dāng)前被執(zhí)行程序所用操作數(shù)的段地址。
  • 其中,DS、SS和ES寄存器的內(nèi)容可由程序設(shè)置,而CS寄存器的內(nèi)容不能用程序設(shè)置。
2.指令指針寄存器(IP)

它主要用來存放將要執(zhí)行的下一條指令的偏移量,與CS聯(lián)合形成下一條指令的物理地址。

3.地址加法器

它用來計(jì)算物理地址的,物理地址的形成:
理地址 = 段基地址×10H + 偏移量
8086微處理器有20條地址總線,可尋址1MB的存儲器空間。由于8086微處理器是一個(gè)16位結(jié)構(gòu),段寄存器均為16位,這樣16位寄存器就無法存放20位地址了。為了解決這個(gè)問題,8086內(nèi)部就設(shè)置了一個(gè)20位的地址加法器,它首先將16位的段地址左移4位,然后再與16位的偏移地址相加形成20位的物理地址,如圖:


每當(dāng)取指令的時(shí),則自動選擇代碼段寄存器CS,再加上由指令指針寄存器(IP)提供的16位偏移量,按上述方法計(jì)算后得到所要取的指令的20位物理地址。
4.指令隊(duì)列緩沖器

它是一個(gè)6B的先進(jìn)先出緩沖器。8086微處理器具有指令預(yù)取功能,當(dāng)執(zhí)行部件(EU)不使用總線接口部件與片外進(jìn)行數(shù)據(jù)傳送,總線接口部件就可以從存儲器中讀取指令填充指令隊(duì)列緩沖器。 8088微處理器的指令隊(duì)列緩沖器只有4B深度。

5.總線接口控制邏輯

這部分電路是處理器與外部總線的接口,它首先把已形成的20位地址碼經(jīng)地址線送出片外,然后經(jīng)數(shù)據(jù)總線進(jìn)行操作數(shù)或指令代碼的傳輸。操作數(shù)送相關(guān)寄存器或由相關(guān)寄存器送到片外,而指令代碼從片外存儲器讀入到指令隊(duì)列等待譯碼執(zhí)行。

EU

1.16位通用寄存器組(AX,BX,CX,DX,SP,BP,SI,DI)
(1)4個(gè)16位通用的數(shù)據(jù)寄存器:AX、BX、CX、DX,又可以各分為兩個(gè)8位的寄存器:AL、AH、BL、BH、CL、CH、DL、DH

其中:
AX: 具有累加功能,可作16位累加器,AL可作為8位累加器。
BX: 在基址變址尋址時(shí)作為基址寄存器。
CX: 在循環(huán)類與串處理類指令執(zhí)行時(shí)作為默認(rèn)的計(jì)數(shù)器寄存器。
DX: 作為數(shù)據(jù)寄存器使用,在雙字運(yùn)算中存放高16位數(shù)據(jù)。

(2)另外四個(gè)地址指針和變址寄存器

SP(Stack Pointer):堆棧指針寄存器,用來指出堆棧的頂部偏移地址。
BP(Base Pointer):基地址指針寄存器,在間接尋址時(shí)作為基地址寄存器。
SI(Source Index):源變址寄存器,在間接尋址時(shí)作為地址寄存器或變址寄存器。在字符串處理指令中,作為目的變址寄存器。
DI(Destination Index):目的變址寄存器,在間接尋址時(shí)作為地址寄存器或變址寄存器。在字符串處理指令中,作為源變址寄存器。

2.算術(shù)邏輯單元(ALU)

它主要完成算術(shù)運(yùn)算、邏輯運(yùn)算。

3.標(biāo)志寄存器(FLAG)

它是一個(gè)16位的寄存器,用來記錄程序中運(yùn)行結(jié)果的狀態(tài)信息,它們是根據(jù)有關(guān)指令的運(yùn)行結(jié)果由 CPU 自動設(shè)置的。其中9位有定義, 9位中6位表示狀態(tài),3位表示控制標(biāo)志,見圖


(1)進(jìn)位標(biāo)志(CF):運(yùn)算指令執(zhí)行之后,若在最高位上產(chǎn)生進(jìn)位、借位時(shí),該標(biāo)志位被置1。 具體地說,兩個(gè)數(shù)相加時(shí),最高位(D15或D7)有進(jìn)位,或當(dāng)兩個(gè)數(shù)相減時(shí),最高位有借位,進(jìn)位標(biāo)志位被置1,即CF=1;否則CF=0。
(2)奇偶標(biāo)志(PF):8086/8088 CPU中采用奇校驗(yàn),運(yùn)算指令執(zhí)行后,運(yùn)算結(jié)果的低8位中含1的位數(shù)為偶數(shù)時(shí),該標(biāo)志位被置1,否則被置0。也稱為偶標(biāo)志位。
(3)輔助進(jìn)位標(biāo)志(AF):運(yùn)算指令執(zhí)行后。當(dāng)兩個(gè)數(shù)相加(減)時(shí),當(dāng)D3有向D4進(jìn)(借)位時(shí),該標(biāo)志位被置1,否則被置0。
(4) 全零標(biāo)志(ZF):運(yùn)算指令執(zhí)行后,結(jié)果的每一位都為零時(shí)該標(biāo)志位被置1。
(5) 符號標(biāo)志(SF):在帶符號數(shù)運(yùn)算時(shí),如果運(yùn)算結(jié)果最高位為1,表示結(jié)果為負(fù)值,SF位被置1,否則SF位被置0。SF也稱為負(fù)標(biāo)志位。
(6)溢出標(biāo)志(OF):運(yùn)算指令執(zhí)行后,結(jié)果的數(shù)值產(chǎn)生溢出,該標(biāo)志位被置1,否則被置0。
(7)方向標(biāo)志(DF):用于字符串指令操作,當(dāng)DF=0時(shí),字符串處理由低地址向高地址處理;當(dāng)DF=1時(shí),則從高位地址向低位地址處理。
(8)中斷允許標(biāo)志(IF):用來控制可屏蔽硬件中斷。當(dāng)IF=1時(shí)8086微處理器可以接受片外來的可屏蔽中斷請求,開中斷;IF=0時(shí)片外來的中斷請求被阻止,關(guān)中斷,也稱被屏蔽。
(9)陷阱標(biāo)志(TF):該標(biāo)志用來控制單步中斷。在TF=1時(shí),以單步方式執(zhí)行程序。即8086每執(zhí)行完—條指令就產(chǎn)生處理器內(nèi)部單步中斷。單步執(zhí)行指令可使程序員跟蹤指令的執(zhí)行過程,進(jìn)行積序的調(diào)試。
4.操作控制電路

操作控制電路是8086微處理器的控制核心,首先將指令隊(duì)列中送來的一條指令進(jìn)行譯碼,然后根據(jù)不同指令的功能產(chǎn)生出所需要的控制信號來控制各相關(guān)功能部件的操作。

8086、8088的功能結(jié)構(gòu)

微處理器 8086, 8088結(jié)構(gòu)類似。從程序員和使用角度來看的結(jié)構(gòu)即編程結(jié)構(gòu)從功能上分為兩部分:總線接口部分BIU(Bus Interface Unit),執(zhí)行部分EU(Execution Unit)。
由于指令隊(duì)列的存在,兩部分各自執(zhí)行自己的功能并行工作,這種工作方式與傳統(tǒng)的計(jì)算機(jī)在執(zhí)行指令時(shí)的串行工作相比極大的提高了工作效率。
計(jì)算機(jī)執(zhí)行程序時(shí),CPU的工作順序是:

  • 取指令 -> 執(zhí)行指令 -> 再取指令 -> 再執(zhí)行指令...CPU串行工作。
  • 8086CPU工作順序是:取指令,執(zhí)行指令同時(shí)進(jìn)行。并行工作。

8088的寄存器結(jié)構(gòu)

存儲器組織

8088的功能結(jié)構(gòu)

  • 1、總的存儲空間為1M字節(jié),每段最長可達(dá) 64K字節(jié)。
  • 2、各段起始地址能被 16 整除。(低 4 位為 0 )
  • 3、各段之間可分開、部分或完全重疊、可首尾相接。
  • 4、根據(jù)各段的用途將其定義為CS、DS、ES、SS段。并用偏移地址(距段起址的字節(jié)距離)表示被訪問單元。

注:常在CS中用 IP 表示偏移量,SS中用 SP、BP,DS中用 BX、SI、DI、數(shù)值 。

實(shí)際地址的形成

  • 物理地址:20 位
  • 邏輯地址:
    段基址(段寄存器的內(nèi)容)16位
    偏移地址(字節(jié)距離)16位
    一個(gè)實(shí)際地址可用多個(gè)邏輯地址表示。

標(biāo)志寄存器

  • CF:進(jìn)位標(biāo)志位。當(dāng)執(zhí)行一個(gè)加法(或減法)運(yùn)算使最高位產(chǎn)生進(jìn)位(或借位)時(shí),CF為1,否則為0。
  • PF:奇偶標(biāo)志位。該標(biāo)志位反映運(yùn)算結(jié)果中1的個(gè)數(shù)是偶數(shù)個(gè)還是奇數(shù)個(gè)。當(dāng)指令執(zhí)行結(jié)果的低8位中含偶數(shù)個(gè)1時(shí),PF為1,否則為0.
  • AF:輔助進(jìn)位標(biāo)志位。當(dāng)執(zhí)行一個(gè)加法(或減法)運(yùn)算使結(jié)果的低4位向高4位有進(jìn)位(或借位)時(shí),AF為1,否則為0.
  • ZF:零標(biāo)志位。若當(dāng)前的運(yùn)算結(jié)果為零,ZF為1,否則為0.
  • SF:符號標(biāo)志位。他與運(yùn)算結(jié)果的最高位相同。
  • OF:溢出標(biāo)志位。當(dāng)補(bǔ)碼運(yùn)算有溢出時(shí),OF為1,否則為0.
  • DF:方向標(biāo)志位。用以指定字符串處理的方向,當(dāng)DF=1,字符串以遞減順序處理,即地址以從高到低順序遞減。反之則以遞增處理。
  • IF:中斷允許標(biāo)志位。它用來控制8086是否允許接收外部中斷請求。若IF=1,8086能響應(yīng)外部中斷。反之則不響應(yīng)。注意:IF的狀態(tài)不影響非屏蔽中斷請求(NMI)和CPU內(nèi)部中斷請求。
  • TF:跟蹤標(biāo)志位。為調(diào)試程序而設(shè)定的陷阱控制位。當(dāng)TF=1,8086CPU處于單步狀態(tài),此時(shí)CPU每執(zhí)行完一條指令就自動產(chǎn)生一次內(nèi)部中斷。當(dāng)該復(fù)位后,CPU恢復(fù)正常

8086指令系統(tǒng)

數(shù)據(jù)傳送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF、POPF、CBW、CWD、CWDE。

算術(shù)指令:ADD、ADC、INC、SUB、SBB、DEC、CMP、MUL、DIV、DAA、DAS、AAA、AAS。

邏輯指令:AND、OR、XOR、NOT、TEST、SHL、SAL、SHR、SAR、RCL、RCR、ROL、ROR。

控制轉(zhuǎn)移指令:JMP、Jcc、JCXZ、LOOP、LOOPZ、LOOPNZ、LOOPNE、CALL、RET、INT。

串操作指令:MOVS、LODS、STOS、CMPS、SCAS。

標(biāo)志處理指令:CLC、STC、CLD、STD。

數(shù)據(jù)傳送指令

通用數(shù)據(jù)傳送指令

MOV dst, src;傳送指令(move)

執(zhí)行操作:(dst) ← (src)
功能: 將源操作數(shù)(字節(jié)或字)傳送到目的地址。

注意:

  • 目的操作數(shù)dst和源操作數(shù)src不能同時(shí)用存儲器尋址方式,這個(gè)限制適用于所有指令;
  • 目的操作數(shù)dst不能是CS,也不能用立即數(shù)方式;
  • 目的操作數(shù)dst和源操作數(shù)src不允許同時(shí)為段寄存器;
  • MOV指令不影響標(biāo)志位。
PUSH   src ; 進(jìn)棧指令(push onto the stack)

執(zhí)行操作: (SP) ← (SP)-2
      ((SP)) ← (src)

POP    dst ; 出棧指令(pop from the stack)

執(zhí)行操作: (dst) ← ((SP))
      (SP) ← (SP)+2

PUSH和POP指令分別將數(shù)據(jù)存入堆棧或把堆棧中的數(shù)據(jù)取出。堆棧是以LIFO(后進(jìn)先出)方式工作的一個(gè)存儲區(qū),程序中定義的堆棧段就是這樣一個(gè)LIFO存儲區(qū)。數(shù)據(jù)存入堆棧單元或從堆棧單元中取出都由堆棧指針SP指示,而SP總是指向棧頂,所以進(jìn)棧和出棧指令都會自動修改SP。

PUSH指令執(zhí)行時(shí),SP的內(nèi)容先減2,然后將數(shù)據(jù)壓入SP所指示的字單元,存儲的方法同樣是高8位存入高地址字節(jié),低8位存入低地址字節(jié)。POP指令執(zhí)行時(shí),將SP所指示的棧頂?shù)刂返膬?nèi)容取出放入目的地址,然后SP增2,指向新的棧頂?shù)刂贰?/p>

注意:

  • PUSH和POP指令只能是字操作,因此存取字?jǐn)?shù)據(jù)后,SP的修改必須是+2或-2;

  • PUSH和POP指令不能使用立即數(shù)方式;

  • POP指令的dst不允許是CS寄存器;

  • PUSH和POP指令都不影響標(biāo)志位。

    PUSH指令在程序中常用來暫存某些數(shù)據(jù),而POP指令又可將這些數(shù)據(jù)恢復(fù)。

XCHG  opr1, opr2 ; 交換指令(exchange)

執(zhí)行操作:(opr1) ←→ (opr2)
XCHG指令使兩個(gè)操作數(shù)opr1,和opr2互相交換,其中一個(gè)操作數(shù)必須在寄存器中,另一個(gè)操作數(shù)可以在寄存器或存儲器中。

注意:

  • 不允許使用段寄存器
  • 不影響標(biāo)志位

累加器專用傳送指令

這組指令只限于使用累加器(ac:AX 或AL)傳送信息。

IN  ac, port ; 輸入指令(input), port≤0FFH

執(zhí)行操作: (AL) ← (port) 傳送字節(jié)或 (AX) ← (port+1,port) 傳送字

IN  ac, DX  ; 輸入指令, DX中的port>0FFH

執(zhí)行操作: (AL) ← ((DX)) 傳送字節(jié)或 (AX) ← ((DX)+1,(DX)) 傳送字

OUT  port, ac  ; 輸出指令(output), port≤0FFH

執(zhí)行操作: (port) ← (AL) 傳送字節(jié)或 (port+1,port) ← (AX) 傳送字

OUT  DX, ac   ; 輸出指令(output), DX中的 port>0FFH

執(zhí)行操作: ((DX)) ← (AL) 傳送字節(jié)或 ((DX)+1,(DX)) ← (AX) 傳送字

對8086及其后繼機(jī)型的微處理機(jī),所有I/O端口與CPU之間的通信都由輸入輸出指令I(lǐng)N和OUT來完成。IN指令將信息從I/O輸入到CPU,OUT指令將信息從CPU輸出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。微處理機(jī)分配給外部設(shè)備最多有64K個(gè)端口,其中前256個(gè)端口(0~FFH)稱為固定端口,可以直接在指令中指定。當(dāng)端口地址超過8位(≥256),稱為可變端口,它必須先送到DX寄存器,然后再用IN或OUT指令傳送信息。CPU與I/O端口傳送信息的寄存器只限于累加器ac (AX或AL),傳送16位信息用AX,傳送8位信息用AL,這取決于外設(shè)端口的寬度。

注意:

  • 只限于在AL或AX與I/O端口之間傳送信息
  • 不影響標(biāo)志位
XLAT   ; 換碼指令(translate)

執(zhí)行操作: (AL) ← ((DS)×16+(BX)+(AL))
這條指令根據(jù)AL寄存器提供的位移量,將BX指示的字節(jié)表格中的代碼換存在AL中。該指令還可寫為:XLAT opr,opr為字節(jié)表格的首地址,因?yàn)閛pr所表示的偏移地址已存入BX寄存器,所以opr在換碼指令中可有可無,有則可提高程序的可讀性。

注意:

  • 所建字節(jié)表格的長度不能超過256字節(jié),因?yàn)榇娣盼灰屏康氖?位寄存器AL;
  • XLAT指令不影響標(biāo)志位。

地址傳送指令

這組指令完成把地址送到指定寄存器的功能。

LEA reg, src ; 有效地址送寄存器(load effective address)

執(zhí)行操作:(reg) ← offset of src
LEA指令把源操作數(shù)的有效地址送到指定的寄存器,這個(gè)有效地址是由src選定的一種存儲器尋址方式確定的。

LDS reg, src ; 指針?biāo)图拇嫫骱虳S(load DS with point)

執(zhí)行操作: (reg) ← (src)(DS) ← (src+2)

LES reg, src ; 指針?biāo)图拇嫫骱虴S(load ES with point)

執(zhí)行操作: (reg) ← (src)(ES) ← (src+2)

LDS和LES指令把確定內(nèi)存單元位置的偏移地址送寄存器,段地址送DS或ES。這個(gè)偏移地址和段地址(也稱地址指針)是由src指定的兩個(gè)相繼字單元提供的。

注意:

  • 指令中的reg不能是段寄存器;
  • 指令中的src必須使用存儲器尋址方式;
  • 該指令不影響標(biāo)志位。

標(biāo)志寄存器傳送指令

這組指令完成和標(biāo)志位有關(guān)的操作。

LAHF 標(biāo)志寄存器的低字節(jié)送AH(load AH with flags) 
SAHF AH送標(biāo)志寄存器低字節(jié)(store AH into flags)
PUSHF 標(biāo)志進(jìn)棧(push the flags)
POPF 標(biāo)志出棧(pop the flags)

注意:

  • LAHF和SAHF指令隱含的操作寄存器是AH和FLAGS
  • LAHF和PUSH不影響標(biāo)志位,SAHF和POPF則由裝入的值來確定標(biāo)志位的值。

LAHF 標(biāo)志寄存器的低字節(jié)送AH(load AH with flags)執(zhí)行操作:(AH) ← (FLAGS)0-7

SAHF AH送標(biāo)志寄存器低字節(jié)(store AH into flags)執(zhí)行操作:(FLAGS) 0-7 ← (AH)

PUSHF 標(biāo)志進(jìn)棧(push the flags)執(zhí)行操作:(SP) ← (SP)-2((SP)+1,(SP)) ← (FLAGS)0-15

POPF 標(biāo)志出棧(pop the flags)執(zhí)行操作:(FLAGS) 0-15 ← ((SP)+1,(SP))(SP) ← (SP)+2

算術(shù)指令

加法指令

ADD 加法指令

寫法: ADD DST,SRC
執(zhí)行操作:(DST)<-(SRC)+(DST)

ADC 帶進(jìn)位加法指令

寫法: ADC DST,SRC
執(zhí)行操作:(DST)<-(SRC)+(DST)+CF

ADD 加1指令

寫法: INC OPR
執(zhí)行操作:(OPR)<-(OPR)+1

減法指令

SUB 減法指令

寫法: SUB DST,SRC
執(zhí)行操作:(DST)<-(DST)-(SRC)

SBB 帶借位減法指令

寫法: SBB DST,SRC
執(zhí)行操作:(DST)<-(DST)-(SRC)-CF

DEC 減1指令

寫法: DEC OPR
執(zhí)行操作:(OPR)<-(OPR)-1

NEG 求補(bǔ)指令

寫法: NEG OPR
執(zhí)行操作:(OPR)<- -(OPR)

CMP 比較指令

格式: CMP OPR1,OPR2
執(zhí)行操作:(OPR1)-(OPR2)

邏輯指令

AND\OR\XOR\NOT\TEST

寫法:

AND reg/mem,reg/mem/imm;
OR reg/mem,reg/mem/imm;
XOR reg/mem,reg/mem/imm;
NOT reg/mem;
TEST reg/mem,reg/mem/imm;

AND\TEST\OR\XOR,兩個(gè)操作數(shù)必須類型匹配,而且不能同時(shí)是內(nèi)存操作數(shù)。

XOR通常用來將寄存器清0,如 XOR AX,AX;

TEST與AND的關(guān)系類似于CMP與SUB。TEST的典型用法是檢查某位是否為1

位移指令

SHL(邏輯左移)

寫法:SHL REG\mem,1\CL ;

作用:將dest的各個(gè)二進(jìn)制位向左移動1(CL)位,并將DEST的最高位移出到CF,最低位移入0。

SAL(算術(shù)左移)

寫法:SAL REG\mem,1\CL ;

作用:將dest的各個(gè)二進(jìn)制位向左移動1(CL)位,并將DEST的最高位移出到CF,最低位移入0(同SHL)。

SHR(邏輯右移)

寫法:SHR REG\mem,1\CL ;

作用:將dest的各個(gè)二進(jìn)制位向左移動1(CL)位,并將DEST的最低位移出到CF,最高位移入0。

SAR(算術(shù)右移)

寫法:SAR REG\mem,1\CL ;

作用:將dest的各個(gè)二進(jìn)制位向左移動1(CL)位,并將DEST的最低位移出到CF,最高位不變。

SHLD(雙精度左移)

寫法:SHLD REG16/REG32/MEM16/MEM32, REG16/REG32, IMM8/CL;(類型須匹配)

作用:將OPRD1的各二進(jìn)制左移,并將oprd1的最高位移到CF,oprd2的最高位移到oprd1的最低位,但是,oprd2的值不變。

SHRD(雙精度右移)

寫法與作用與雙精度左移類似。移動方向?yàn)橛乙啤?/p>

循環(huán)移位指令

ROL(循環(huán)左移)

寫法:ROL REG\MEM, 1\CL;或 ROL REG/MEM,IMM8;(類型可不匹配)

作用:將DEST的各二進(jìn)制位向左移動,并將最高位移出到CF,并同時(shí)移入最低位。

ROR(循環(huán)右移)

寫法:ROR REG\MEM, 1\CL;或 ROR REG/MEM,IMM8;(類型可不匹配)

作用:將DEST的各二進(jìn)制位向右移動,并將最低位移出到CF,并同時(shí)移入最高位。

RCL(帶進(jìn)位循環(huán)左移)

寫法:RCL REG\MEM, 1\CL;或 RCL REG/MEM,IMM8;(類型可不匹配)

作用:將DEST的各二進(jìn)制位向左移動,并將最高位移出到CF,原CF移入最低位。

RCR(帶進(jìn)位循環(huán)右移)

寫法:RCR REG\MEM, 1\CL;或 RCR REG/MEM,IMM8;(類型可不匹配)

作用:將DEST的各二進(jìn)制位向右移動,并將最低位移出到CF,原CF移入最高位。

位測試指令

BT(位測試)

寫法:BT REG16/MEM16,REG16/IMM8;或BT REG32/MEM32,REG32/IMM8;

作用:CF=DEST的第index位,dest不變。

BTS(位測試并置位)

寫法:BTS REG16/MEM16,REG16/IMM8;或BTS REG32/MEM32,REG32/IMM8;

作用:CF=DEST的第index位,dest的第index位=1;

BTR(位測試并復(fù)位)

寫法:BTR REG16/MEM16,REG16/IMM8;或BTR REG32/MEM32,REG32/IMM8;

作用:CF=DEST的第index位,dest的第index位=0;

BTC(位測試并復(fù)位)

寫法:BTC REG16/MEM16,REG16/IMM8;或BTC REG32/MEM32,REG32/IMM8;

作用:CF=DEST的第index位,dest的第index位取反;

位掃描指令

BSF(前向位掃描)

寫法:BSF reg16/reg32, reg16/reg32/mem16/mem32;(類型須匹配)

作用:dest=src中值為1的最低位編號(從低位向高位搜索)

BSR(后向位掃描)

寫法:BSR reg16/reg32, reg16/reg32/mem16/mem32;(類型須匹配)

作用:dest=src中值為1的最高位編號(從高位向低位搜索)

說明:BSF和BSR搜索SRC操作數(shù)中首次出現(xiàn)1的位置,BSF從低位向高位搜索,BSR反之。若找到一個(gè)1,則置ZF=0,并存儲位編號到DEST操作數(shù)中。若SRC=0,即沒有1出現(xiàn),則置ZF=1,且dest的值不確定。

控制轉(zhuǎn)移指令開始

JMP(無條件轉(zhuǎn)移指令)

執(zhí)行代碼的跳轉(zhuǎn),分為兩種,一:段內(nèi)轉(zhuǎn)移,即要跳過去的代碼地址和當(dāng)前地址在同一段,這時(shí)只要修改IP(專用寄存器–指令指針)即可;二:段間轉(zhuǎn)移:即要跳過去的代碼地址和當(dāng)前代碼地址不在同一段內(nèi),需要同時(shí)修改CS和IP的值。

寫法:

1、JMP label;若label與該指令位于同一代碼段內(nèi),IP=label的偏移地址,否則CS:IP=label的分段地址,簡單的說,就是跳到label的地址去。

2、JMP reg16/mem16;段內(nèi)轉(zhuǎn)移,偏移地址=reg16/[mem16]

3、JMP mem32;段間間接轉(zhuǎn)移,段地址CS=mem32高字,偏移地址IP=mem32低字。

說明:當(dāng)操作數(shù)是內(nèi)存操作數(shù)時(shí),若內(nèi)存操作數(shù)是雙字類型,則產(chǎn)生段間轉(zhuǎn)移,若內(nèi)存操作數(shù)是字類型,則產(chǎn)生段內(nèi)間接轉(zhuǎn)移。當(dāng)不能確定類型時(shí),編譯器將報(bào)錯(cuò)。

Jcc(條件轉(zhuǎn)移指令)

寫法:Jcc label;

作用:若條件成立,則IP=label的偏移地址,否則,CPU將忽略該條件轉(zhuǎn)移,繼續(xù)執(zhí)行下一條指令。

JCXZ/JECXZ(Jump if CX/ECX is zero)

寫法:JCXZ label;(若CX=0,則轉(zhuǎn)移到label)

? JECXZ label;(若ECX=0,則轉(zhuǎn)移到label)

說明:label相對位移量必須在-126~127之間

循環(huán)指令

LOOP label;

作用:CX=CX-1;若CX<>0,則轉(zhuǎn)移到label;

LOOPZ/LOOPE label;

作用:CX=CX-1;若CX<>0且 ZF=1,則轉(zhuǎn)移到label;

LOOPNZ/LOOPNE label;

作用:CX=CX-1;若CX<>0且ZF=0,則轉(zhuǎn)移到label;

說明:label相對位移量必須在-128~127之間

過程調(diào)用和返回指令

CALL(過程調(diào)用)

寫法:CALL label;

作用:若label與該指令在同一代碼段,則為段內(nèi)直接調(diào)用,IP進(jìn)棧,IP=label的偏移地址,如果是不在同一代碼段,則為段間間接調(diào)用,CS:IP進(jìn)棧,CS:IP=label的分段地址

寫法:CALL reg16/mem16;

作用:段內(nèi)間接調(diào)用,IP進(jìn)棧,IP=reg16/【mem16】

寫法:CALL mem32;

作用:段間間接調(diào)用,CS:IP進(jìn)棧,CS等于mem32高字,ip等于mem32低字。

該指令與JMP指令的區(qū)別就是保存了CS:IP的值,這樣在調(diào)用指令結(jié)束后,可以返回回來而已。

RET(過程返回)

寫法:RET; 近返回或遠(yuǎn)返回

RETN; 近返回;

RETF; 遠(yuǎn)返回

RET imm16; 近返回或遠(yuǎn)返回,并調(diào)整堆棧,SP=SP+imm16;

RETN imm16;近返回,并調(diào)整堆棧,SP=SP+imm16;

RETF imm16;遠(yuǎn)返回,并調(diào)整堆棧,SP=SP+imm16;

作用:RET/RETN/RETF:返回地址出棧,從而使調(diào)用返回,其中,遠(yuǎn)返回是POP一個(gè)雙字到CS:IP,而近返回是POP一個(gè)字到IP

RET/RETN/RETF imm16:在返回后,CPU立即將imm16加到堆棧指針SP。這種機(jī)制用來在返回前將參數(shù)從棧中移除。

說明:CALL 與 RET必須配合使用,并且確保返回時(shí)棧頂正好是返回地址,不然就會出錯(cuò)。

INT(中斷指令)

寫法:INT n;(n為中斷號,取值為0~255)

通常,程序內(nèi)部的跳轉(zhuǎn),用JMP或CALL,并且JMP和CALL得參數(shù)是要跳轉(zhuǎn)的過程的入口指令地址,而INT則是調(diào)用系統(tǒng)提供的中斷服務(wù)程序,并且參數(shù)是中斷號,然后由CPU根據(jù)中斷號去計(jì)算中斷服務(wù)程序的入口地址,MS DOS使用中斷號21H作為系統(tǒng)調(diào)用,一般INT中斷的步驟如下:

(1)由AH給出中斷號

(2)根據(jù)相應(yīng)功能的要求,設(shè)置入口參數(shù)

(3)INT 21H

(4)分析和使用出口參數(shù)

除了直接以AL或AX返回出口參數(shù)外,INT 21H還是用AL或AX作為返回碼,對于功能號0~2eh,由AL返回0(表示成功)或1(表示失敗);其余功能號則由CF返回0或者1,并由AX返回錯(cuò)誤碼。

標(biāo)志處理指令開始

CLC ; CF=0

STC ; CF=1

CMC ; CF=NOT CF

CLD ; DF=0

STD ; DF=1

CLI ; IF=0(應(yīng)慎用)

STI ; IF=1

串操作指令開始

MOVS(串傳送)

寫法:

MOVSB/MOVSW/MOVSD

功能:

ES:[DI]=DS:[SI]

If(DF=0)

Then

SI=SI+size;

DI=DI+size;

Else

SI=SI-size;

DI=DI-size;

Endif

其中,size等于1(B)、2(W)、4(D).

作用:將DS:SI所指源串的一個(gè)字節(jié)/字/雙字復(fù)制到ES:DI所指的內(nèi)存單元,然后,若DF=0,則SI和DI增加1、2、4,否則減少1、2、4.

LODS(串載入)

寫法:LODSB\LODSW\LODSD

功能:

AL/AX/EAX=DS:[SI];

IF (DF=0) THEN

SI=SI+size;

ELSE

SI=SI-size;

Endif

作用:將DS:SI所指源串的值復(fù)制到AL/AX/EAX中,然后,根據(jù)DF使SI增加或減小1、2、4

STOS(串存儲)

寫法:

STOSB\STOSW\STOSD

功能:

ES:[DI]=AL/AX/EAX;

IF (DF=0) THEN

DI=DI+size;

ELSE

DI=DI-size;

ENDIF

作用:將AL/AX/EAX中的值復(fù)制到ES:[DI]所指的內(nèi)存單元中去,并根據(jù)DF標(biāo)志位的值調(diào)整DI

CMPS(串比較)

寫法:CMPSB/CMPSW/CMPSD

功能:

DS:[SI]-ES:[DI];

IF (DF=0) THEN

SI=SI+size;DI=DI+size;

ELSE

SI=SI-size;DI=DI-size;

ENDIF

作用:將DS:SI所指內(nèi)存值與ES:DI所指內(nèi)存值進(jìn)行比較,并根據(jù)比較結(jié)果設(shè)置標(biāo)志位,然后,對SI和DI做相應(yīng)的調(diào)整。

SCAS(串掃描)

寫法:SCASB/SCASW/SCASD

功能:

AL/AX/EAX-ES:[DI];

IF (CF=0) THEN

DI=DI+size;

ELSE

DI=DI-size;

ENDIF

作用:將AL/AX/EAX與ES:DI所指內(nèi)存值進(jìn)行比較,根據(jù)比較結(jié)果設(shè)置標(biāo)志位,然后根據(jù)DF調(diào)整相應(yīng)的DI的值。

說明:以上串操作的共性:

DS:SI指向源串,ES:DI指向目的串

重復(fù)前綴

43、重復(fù)前綴

重復(fù)前綴用來和以上幾個(gè)串操作指令混合使用

REP(重復(fù))

功能:當(dāng)CX<>0時(shí),重復(fù)執(zhí)行后面的串指令,每執(zhí)行一次,CX自動-1,該指令只能用在MOVS\LODS\STOS之前

REPZ/REPE(為零/等于時(shí)重復(fù))

功能:當(dāng)CX<>0且ZF=1時(shí),重復(fù)執(zhí)行后面的指令,每執(zhí)行一次,CX自動-1,該指令只能用在CMPS\ACAS之前。

REPNZ/REPNE(非零/不等于時(shí)重復(fù))

功能:CX<>0且ZF=0時(shí),重復(fù)執(zhí)行后面的指令,每執(zhí)行一次,CX自動-1,該指令只能用在CMPS\ACAS之前。

說明:REPNE SCAS(B/W/D)適用于在多字節(jié)、字、雙字?jǐn)?shù)據(jù)結(jié)構(gòu)中搜索特定值。

CPU控制指令-

—————————CPU控制指令-

NOP(無操作)

寫法:NOP;

作用:該指令不做任何事情,只占用1個(gè)字節(jié),耗費(fèi)一個(gè)指令執(zhí)行周期。

HIT(暫停)

寫法:HIT;

作用:HIT使CPU進(jìn)入暫停狀態(tài),這時(shí)CPU不執(zhí)行任何操作,直到系統(tǒng)復(fù)位或發(fā)生外部中斷為止,中斷使CPU繼續(xù)執(zhí)行后面的指令(貌似和屏保或待機(jī)的功能類似)

LOCK(封鎖前綴)

功能:LOCK指令用于多處理器系統(tǒng),作為某些指令的前綴,可以使CPU通過鎖住總線等方式,抱著指令作為原子性操作,即:指令執(zhí)行過程不會被打斷操作。

該指令用于以下指令的前綴時(shí),以保證原子性的對內(nèi)存的“讀-修改-寫”操作:

1) 加法:ADD\ADC\INC\XADD

2) 減法:SUB\SBB\DEC\NEG

3) 交換:XCHG\CMPXCHG\CMPXCHG8B

4) 邏輯:AND\NOT\OR\XOR

5) 位測試:BTS\BTC\BTR

說明:其他類型指令不能加LOCK前綴,另外,XCHG總是原子性操作,無論前面有沒有加LOCK前綴。LOCK前綴典型用于BTS指令,以實(shí)現(xiàn)多處理器環(huán)境中程序的并發(fā)執(zhí)行,如:

LOCK BTS [EBX],AX

LOCK ADD [SI],AL

總結(jié)

以上是生活随笔為你收集整理的微机基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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