RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

匯編語言結(jié)構(gòu)與8086概述

汽車電子技術(shù) ? 來源:滑小稽筆記 ? 作者:滑小稽 ? 2023-03-02 09:54 ? 次閱讀

1.1 匯編語言基本結(jié)構(gòu)模板

圖片

匯編語言的基本框架由這四部分組成,如果某個段沒有代碼,可以將與該段有關(guān)的代碼刪除。

1.2 8086 CPU簡介

Intel8086是一個由Intel于1978年所設(shè)計的16微處理器芯片,是x86架構(gòu)的鼻祖。不久之后,Intel 就推出了 Intel 8088 (一個擁有8根外部數(shù)據(jù)總線的微處理器)。它是以80808085的設(shè)計為基礎(chǔ),擁有類似的寄存器組,但是數(shù)據(jù)總線擴充為16位??偩€界面單元透過6字節(jié)預(yù)存的隊列位指令給執(zhí)行單元,所以取指令和執(zhí)行是同步的,8086 CPU有20條地址線,可直接尋址1MB的存儲空間,每一個存儲單元可以存放一個字節(jié)的二進制信息

1.2.1 8086引腳詳解

圖片

(1) 地址/數(shù)據(jù)復(fù)用AD0~AD15 :雙向三態(tài)門結(jié)構(gòu),采用分時的方法傳送地址或數(shù)據(jù)的復(fù)用引腳。根據(jù)不同時鐘周期的要求,決定當前是傳送要訪問的存儲單元或I/O端口的低16位地址,還是傳送16位數(shù)據(jù),或是處于高阻狀態(tài);

(2) 地址狀態(tài)S3~S6 :地址/狀態(tài)信號,三態(tài)門,采用分時的方法傳送地址或狀態(tài)的復(fù)用引腳。其中A19~A16為20位地址總線的高4位地址,S6~S3是狀態(tài)信號。S6表示CPU與總線連接的情況,S5指示當前中斷允許標志IF的狀態(tài)。S4,S3的代碼組合用來指明當前正在使用的段寄存器。S4與S3的代碼組合及對應(yīng)段寄存器的情況;

(3) 允許總線高8位數(shù)據(jù)傳送/狀態(tài)信號BHE/S7 :輸出三態(tài),為總線高8位數(shù)據(jù)允許信號,當?shù)碗娖接行r,表明在高8位數(shù)據(jù)總線D15 ~D8上傳送1個字節(jié)的數(shù)據(jù)。S7為設(shè)備的狀態(tài)信號;

(4) 時鐘脈沖輸入端口CLK :用于輸入工作脈沖,8086的脈沖為5MHz的方波信號;

(5) 準備就緒信號READY :高電平有效;

(6) 最大最小工作模式選擇端MN/MX :高電平為最小工作模式,低電平為最大工作模式;

(7) 讀信號RD :低電平有效;

(8) 等待測試控制信號TEST :輸入,低電平有效。信號用來支持構(gòu)成多處理器系統(tǒng),實現(xiàn)8086 CPU與協(xié)處理器之間同步協(xié)調(diào)的功能,只有當CPU執(zhí)行WAIT指令時才使用;

(9) 可屏蔽中斷請求信號INTR :高電平有效,8086 CPU在每條指令執(zhí)行到最后一個時鐘周期時,都要檢測INTR引腳信號。INTR為高電平時,表明有I/O設(shè)備向CPU申請中斷,若IF=1,CPU則會響應(yīng)中斷,停止當前的操作,為申請中斷的I/O設(shè)備服務(wù);

(10) 非屏蔽中斷請求信號NMI :高電平有效,當NMI引腳上有一個上升沿有效的觸發(fā)信號時,表明CPU內(nèi)部或I/O設(shè)備提出了非屏蔽的中斷請求,CPU會在結(jié)束當前所執(zhí)行的指令后,立即響應(yīng)中斷請求;

(11) 復(fù)位信號RESET :高電平有效。RESET信號有效時,CPU立即結(jié)束現(xiàn)行操作,處于復(fù)位狀態(tài),初始化所有的內(nèi)部寄存器。復(fù)位后各內(nèi)部寄存器的狀態(tài),當RESET信號由高電平變?yōu)榈碗娖綍r,CPU從FFFF0H地址開始重新啟動執(zhí)行程序

最小工作模式下使用的引腳

(1) 存儲器和I/O端口選擇控制信號M/IO :信號指明當前CPU是選擇訪問存儲器還是訪問I/O端口。為高電平時,訪問存儲器,表示當前要進行CPU與存儲器之間的數(shù)據(jù)傳送。為低電平時,訪問I/O端口,表示當前要進行CPU與I/O端口之間的數(shù)據(jù)傳送;

(2) 寫信號WR :低電平有效。信號有效時,表明CPU正在執(zhí)行寫總線周期,同時由信號決定是對存儲器還是對I/O端口執(zhí)行寫操作;

(3) 可屏蔽中斷響應(yīng)信號INTA :低電平有效;

(4) 地址鎖存允許信號ALE :高電平有效。CPU利用ALE信號可以把AD15~AD0地址/數(shù)據(jù)、A19/S6~A16/S3地址/狀態(tài)線上的地址信息鎖存在地址鎖存器中;

(5) 數(shù)據(jù)發(fā)送接收信號DT/R :三態(tài)門結(jié)構(gòu),用來控制數(shù)據(jù)傳送的方向。高電平時,CPU發(fā)送數(shù)據(jù)到存儲器或I/O端口;低電平時,CPU接收來自存儲器或I/O端口的數(shù)據(jù);

(6) 數(shù)據(jù)允許控制信號DEN :三態(tài),低電平有效信號,用作總線收發(fā)器的選通控制信號。當為低電平時,表明CPU進行數(shù)據(jù)的讀/寫操作;

(7) 總線保持請求信號HOLD :高電平有效。在DMA數(shù)據(jù)傳送方式中,由總線控制器8237A發(fā)出一個高電平有效的總線請求信號,通過HOLD引腳輸入到CPU,請求CPU讓出總線控制權(quán)。

(8) 總線保持響應(yīng)信號HLDA :高電平有效。HLDA是與HOLD配合使用的聯(lián)絡(luò)信號。在HLDA有效期間,HLDA引腳輸出一個高電平有效的響應(yīng)信號,同時總線將處于浮空狀態(tài),CPU讓出對總線的控制權(quán),將其交付給申請使用總線的8237A控制器使用,總線使用完后,會使HOLD信號變?yōu)榈碗娖剑珻PU又重新獲得對總線的控制權(quán)。

最大工作模式下使用的引腳

(1) 總線周期狀態(tài)信號S2,S1,S0 :低電平有效。它們表明當前總線周期所進行的操作類型,代碼組合及其對應(yīng)操作見下表

S2 S1 S0 執(zhí)行的操作
0 0 0 中斷響應(yīng)
0 0 1 讀IO端口
0 1 0 寫IO端口
0 1 1 暫停
1 0 0 取指
1 0 1 讀存儲器
1 1 0 寫存儲器
1 1 1 無效

(2) 總線請求允許信號輸入/總線請求允許輸出信號RQ和GT :低電平有效。該信號用以取代最小模式時的HOLD/HLDA兩個信號的功能,是特意為多處理器系統(tǒng)而設(shè)計的。當系統(tǒng)中某一部件要求獲得總線控制權(quán)時,就通過此信號線向8086 CPU發(fā)出總線請求信號,若CPU響應(yīng)總線請求,就通過同一引腳發(fā)回響應(yīng)信號,允許總線請求,表明8086 CPU已放棄對總線的控制權(quán),將總線控制權(quán)交給提出總線請求的部件使用。RQ/GT0優(yōu)先級高于RQ/GT1;

(3) 總線封鎖信號LOCK :低電平有效。信號有效時,表示此時8086 CPU不允許其他總線部件占用總線;

(4) 指令隊列狀態(tài)信號QS1和QS0 :QS1和QS0信號的組合可以指示總線接口部件BIU中指令隊列的狀態(tài),以便其他處理器監(jiān)視、跟蹤指令隊列的狀態(tài)。

1.2.2 8086內(nèi)部結(jié)構(gòu)框圖

圖片

總線接口單元BIU構(gòu)成

(1) 地址加法器 :用于形成20位的物理地址,將段寄存器提供的段基址左移4位,再加上16位的偏移地址生成,送往外部總線,用于尋址內(nèi)存單元,其工作原理如圖所示。

圖片

(2) 4個16位的代碼段寄存器 ,分別為代碼段寄存器CS,數(shù)據(jù)段寄存器DS,堆棧段寄存器SS,擴展段寄存器ES,其中:

代碼段寄存器CS:用于存放當前程序所在段—代碼段的首地址;

數(shù)據(jù)段寄存器DS:用于存放當前程序所用數(shù)據(jù)段的段首地址;

堆棧段寄存器SS:用于存放當前程序所用堆棧段的段首地址;

擴展段寄存器ES:用于存放輔助數(shù)據(jù)(字符串操作的目的區(qū)地址)所在段的段首地址。

(3) 指令指針寄存器IP :用于存放下一條指令的偏移地址;

(4) 一個6字節(jié)的指令隊列緩沖器 :當執(zhí)行單元EU正在執(zhí)行指令且不需要占用總線時,BIU會主動的執(zhí)行預(yù)取指令操作,將所取的指令按先后次序存入指令隊列緩沖器中,隊列遵循“先入先出”原則,并按順序取到EU中執(zhí)行;

(5) 總線控制部件 :用于產(chǎn)生并發(fā)出控制信號。

執(zhí)行單元EU組成

(1) 算術(shù)邏輯單元ALU :用于進行算術(shù)運算與邏輯運算;

(2) 4個16位通用寄存器AX,BX,CX,DX :用于保存操作數(shù)或者運算結(jié)果;

(3) 4個16位專用寄存器 :只能以字的形式操作,常用于段內(nèi)尋址時提供偏移地址,分別為:堆棧指針寄存器SP,基址指針寄存器BP,源變址寄存器SI和目的變址寄存器DI;

(4) 一個16位的標志寄存器FR :又稱為程序狀態(tài)寄存器PSW,用于存放控制標志和反應(yīng)CPU運行的狀態(tài)特征,標志寄存器內(nèi)容如下圖所示:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF

OF:溢出標志位

0:沒有溢出

   1:數(shù)據(jù)溢出

DF:方向標志位

0:向前

   1:向后

IF:中斷標志位

0:禁止中斷

   1:允許中斷

TF:陷阱標志位

SF:符號標志位

0:正數(shù)

   1:負數(shù)

ZF:零標志位

0:不是0

   1:全0

AF:輔助進位標志位

0:關(guān)閉輔助

   1:開啟輔助

PF:奇偶標志位

0:偶數(shù)

   1:奇數(shù)

CF:進位標志位

1.2.3 8086的工作時序圖

在8086CPU中,一個最基本的總線周期由4個時鐘周期組成,即T1,T2,T3,T4一共4個狀態(tài),當CPU需要等待時,可以插入1個或多個等待狀態(tài)Tw。

最小工作模式下的讀時序

圖片

最小工作模式下的寫時序

圖片

總線寫操作時序與讀操作時序基本相似,但是存在幾個不同點:

(1)CPU不是輸出RD信號,而是輸出WR信號;

(2)DT/R整個總線周期都是高電平,表示總線周期為寫周期,在接有數(shù)據(jù)總線收發(fā)器的系統(tǒng)中,用來控制數(shù)據(jù)傳輸方向;

(3)AD15~AD0在T2到T4狀態(tài)輸出數(shù)據(jù),輸出地址與輸出數(shù)據(jù)為同一方向,無需像讀周期那樣要高阻態(tài)做緩沖,所以T2狀態(tài)無高阻態(tài)。

最大工作模式下的讀時序

圖片

最大工作模式下的寫時序

圖片

最大工作模式與最小工作模式時序的區(qū)別:

(1) 控制信號ALE、DEN和DT/R :最大模式中,ALE、DEN和DT/R由總線控制器8288發(fā)出,DEN高電平有效,最小模式中,ALE、DEN和DT/R由8086 CPU直接發(fā)出,DEN是低電平有效;

(2) 命令信號MRDC、MWTC、AMWC、IORC、IOWC和狀態(tài)信號S2,S1,S0 :由于在最大方式下必須使用總線控制器8288,因此在其時序圖中必然出現(xiàn)訪問存儲器和IO接口的命令信號。

復(fù)位時序

圖片

條件:檢測到RESET引腳為上升沿。

復(fù)位邏輯電路:用CLK來與外部RESET同步,內(nèi)部RESET信號要在時鐘的上升沿到來時才有效

1.5 8086最小系統(tǒng)搭建

圖片

圖中的8086 CPU只需要注意以下幾個事情即可:

(1)8086是高電平復(fù)位,所以正常運行時需要將21腳接低電平,圖中的復(fù)位電路當按鍵沒有按下的時候,用一個10K的下拉電阻將該引腳強制拉低,當按鍵按下的時候,21腳會變?yōu)楦唠娖剑藭r8086進入復(fù)位模式,抬起按鍵后,8086停止復(fù)位,進入工作模式;

(2)33腳是最大最小工作模式選擇引腳,當該引腳接VCC時,8086工作在最小工作模式,當該引腳接GND時,8086則工作在最大工作模式,一般默認其工作在最小工作模式;

(3)圖中利用74HC373作為地址鎖存,由于8086 CPU首先發(fā)送地址信息,然后發(fā)送數(shù)據(jù),所以,當8086在T1和T2時刻發(fā)送地址時,利用ALE的下降沿脈沖鎖存地址,確保其余的器件能夠檢測到地址信息。(注:由于8086具有20根地址線,最大尋址空間為1M,在仿真圖中只是用了其中的低16位);

(4)將8086的RD,WR,ALE和M/IO端口引出作為控制線;

(5)由于8086在仿真中已經(jīng)設(shè)計了一個5MHz的時鐘源,所以不需要繪制時鐘信號輸入,在實際設(shè)計中,需要外接5MHz的時鐘源。

(6)INTA是8086的一個外部中斷引腳,可以單獨使用,或者配合中斷芯片來擴展中斷的個數(shù),最大可支持256個中斷。

1.6 Protuse 8.6環(huán)境搭建

1.6.1 仿真8086 CPU配置

(1)放置8086 CPU,74HC373等需要的器件,然后連接對應(yīng)的引腳;

(2)設(shè)置8086CPU的參數(shù),雙擊8086會彈出參數(shù)對話框,此時需要設(shè)置三個參數(shù):Internal Memory Size為1000H,Program Loading Segment為200H,Stop On Int3為Yes,如下圖所示:

圖片

圖片

圖片

1.6.2 程序編寫配置

(1)點擊如圖所示的按鈕創(chuàng)建一個源文件SourceCode;

圖片

(2)點擊菜單欄中Project->CreateProject,然后在彈出對話框進行設(shè)置:

① Family中選擇8086

② Compiler中選擇MASM32(如果顯示MASM32未安裝,直接點擊DownLoad下載安裝即可)。

③ 然后點擊確定,即可創(chuàng)建一個8086的工程,輸入如下圖所示的代碼后點擊運行即可編譯成功并運行程序。

圖片

圖片

注:匯編的源文件后綴是.asm格式

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    403

    瀏覽量

    17475
  • 匯編語言
    +關(guān)注

    關(guān)注

    14

    文章

    409

    瀏覽量

    35793
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521
收藏 人收藏

    評論

    相關(guān)推薦

    如何利用EMU8086仿真系統(tǒng)實現(xiàn)匯編語言程序的編寫和編譯?

    如何利用EMU8086仿真系統(tǒng)實現(xiàn)匯編語言程序的編寫和編譯?
    發(fā)表于 01-18 07:36

    什么是匯編語言

    文章目錄前言一、 匯編語言簡介1.1 什么是匯編語言1.2機器語言簡介1.3 匯編語言的演變史1.4 匯編語言的廣義組成二、硬件與軟件2.1
    發(fā)表于 02-24 07:01

    匯編語言程序設(shè)計下載

    professional assembly language 匯編語言程序設(shè)計本書分為三部分。第一部分講解匯編語言程序設(shè)計環(huán)境基礎(chǔ),第二部分研究匯編語言程序設(shè)計,最后一部分講解高級匯編語言
    發(fā)表于 10-21 17:42 ?0次下載
    <b class='flag-5'>匯編語言</b>程序設(shè)計下載

    匯編語言靜態(tài)分析工具設(shè)計與應(yīng)用

    本文針對當前匯編語言的測試工具較少這一實際情況,針對某種匯編語言語法結(jié)構(gòu)特 點,確定了匯編語言靜態(tài)分析工具的總體結(jié)構(gòu)框架,并對工具實現(xiàn)過程中重點的功能模塊算法, 進行
    發(fā)表于 06-19 11:52 ?27次下載

    匯編語言自學(xué)教程

    匯編語言自學(xué)教程 匯編語言(AssemblyLanguage)是面向機器的程序設(shè)計語言。在匯編語合中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label
    發(fā)表于 03-15 14:24 ?511次下載

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

    實 驗   匯編語言程序結(jié)構(gòu) 一、實驗?zāi)康?nbsp;1.掌握匯編語言程序上機過程。    2.掌握匯編語言
    發(fā)表于 09-28 23:11 ?2866次閱讀

    Linux中的匯編語言

    在閱讀Linux源代碼時,你可能碰到一些匯編語言片段,有些匯編語言出現(xiàn)在以.S為擴展名的匯編文件中,在這種文件中,整個程序全部由匯編語言組成。有些
    發(fā)表于 04-07 20:43 ?55次下載

    Assemble匯編語言設(shè)計技術(shù)

    匯編語言 設(shè)計程序,是所有程序語言的基本資源。我們不管你使用除匯編語言或指令代碼以外的程序語言編程,僅僅是編程表達、編程規(guī)則和變成環(huán)境的變化,但是這些變化都是基于匯
    發(fā)表于 07-07 15:47 ?0次下載

    ARM匯編語言官方手冊(中文)

    ARM匯編語言官方手冊(中文)匯編語言ARM匯編語言官方手冊(中文)
    發(fā)表于 12-28 15:02 ?212次下載

    匯編語言

    匯編語言舉例,比如讀寄存器內(nèi)容的源代碼、匯編語言制作的光帶菜單及源程序、獲得操作系統(tǒng)版本的匯編源代碼等
    發(fā)表于 12-31 10:40 ?33次下載

    匯編語言學(xué)習(xí)課件_匯編語言程序組織

    第四章 匯編語言程序組織 4.1 匯編語言語句格式 4.2 匯編語言源程序結(jié)構(gòu) 4.3 常用偽指令 4.4 匯編語言操作符
    發(fā)表于 12-31 10:41 ?0次下載

    16位和32位微處理器指令系統(tǒng)與匯編語言編程

    16位和32位微處理器指令系統(tǒng)與匯編語言編程, 本章學(xué)習(xí)要點 8086CPu指令系統(tǒng)的尋址方式 8086CPU指令及其應(yīng)用 匯編語言基本格式
    發(fā)表于 12-31 10:41 ?0次下載

    匯編語言程序設(shè)計自學(xué)教程

    匯編語言程序設(shè)計自學(xué)教程,幫助自學(xué)者掌握匯編語言的自行設(shè)計與編程。
    發(fā)表于 04-06 15:47 ?40次下載

    匯編語言結(jié)構(gòu)化設(shè)計程序教程

    匯編語言結(jié)構(gòu)化設(shè)計程序教程說明。
    發(fā)表于 03-26 09:38 ?24次下載

    單片機匯編語言結(jié)構(gòu)/數(shù)據(jù)類型/匯編指令

    開發(fā)匯編語言是為了為機器級代碼指令提供助記符或符號,匯編語言程序由助記符組成,因此應(yīng)將它們翻譯成機器代碼。負責(zé)這種轉(zhuǎn)換的程序稱為匯編程序。匯編語言通常被稱為低級
    的頭像 發(fā)表于 07-07 12:28 ?2981次閱讀
    RM新时代网站-首页