青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統(tǒng)計(jì)

最新評(píng)論

微機(jī)原理與匯編語(yǔ)言基礎(chǔ) --- 轉(zhuǎn)

C語(yǔ)言能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,能進(jìn)行位運(yùn)算,可以直接對(duì)硬件進(jìn)行操作,例如可以允許直接訪問(wèn)內(nèi)存或端口的物理地址。因此,學(xué)習(xí)C語(yǔ)言的人掌握一定的匯編語(yǔ)言基礎(chǔ)是必要的。

一、80x86系列CPU的編程結(jié)構(gòu)

寄存器在匯編語(yǔ)言中的地位類似于變量。寄存器變量的訪問(wèn)時(shí)間遠(yuǎn)小于內(nèi)存變量的訪問(wèn)時(shí)間。在匯編語(yǔ)言中大量的使用寄存器而不是直接訪問(wèn)內(nèi)存。

1 寄存器堆

8086CPU是Intel系列的16位微處理器,有16根數(shù)據(jù)線和20根地址線,直接尋址空間為2^20即1MB。8088CPU的對(duì)外數(shù)據(jù)總線為8位,稱為準(zhǔn)16位微處理器。

8086/8088的內(nèi)部寄存器(register)共有14個(gè),如下:

(1)通用寄存器:8個(gè),包括數(shù)據(jù)寄存器、地址指針寄存器、變址寄存器。

數(shù)據(jù)寄存器4個(gè):AX BX CX DX,它們又可作為8個(gè)8位的寄存器使用,即AH BH CH DH AL BL CL DL

AX稱為累加器,I/O指令均使用該寄存器,訪問(wèn)外部硬件和接口。

BX稱為基址寄存器,在訪問(wèn)內(nèi)存時(shí)用于存放基地址。

CX稱為計(jì)數(shù)寄存器,用于循環(huán)、字符串的循環(huán)控制。

DX稱為數(shù)據(jù)寄存器,在寄存器間接尋址的i/o指令中存放i/o地址,在作雙字運(yùn)算時(shí)[DX][AX]構(gòu)成一個(gè)雙字。

地址指針寄存器2個(gè):SP BP

SP稱為堆棧指針寄存器,BP稱為基址指針寄存器,在作數(shù)組和字符串運(yùn)算時(shí),用于存放內(nèi)存的偏移地址。

變址寄存器2個(gè):SI DI

SI稱為源變址寄存器,DI稱為目的變址寄存器,用于數(shù)據(jù)塊操作的內(nèi)存尋址。

(2)段寄存器4個(gè):CS DS ES SS

CS代碼段寄存器,DS數(shù)據(jù)段寄存器,ES附加段寄存器,SS堆棧段寄存器

用于存放段地址(段基址)

(3)指令指針I(yè)P:始終指向?qū)⒁獔?zhí)行的指令。用戶不能直接訪問(wèn)和編程。

(4)標(biāo)志寄存器FLAGS:16位寄存器,8086/8088僅使用了九個(gè)標(biāo)志位。

2 標(biāo)志寄存器

CF:進(jìn)位標(biāo)志位

PF:奇偶標(biāo)志位

AF:輔助進(jìn)位位

ZF:零標(biāo)志位

SF:符號(hào)標(biāo)志位

OF:溢出標(biāo)志位

TF:跟蹤標(biāo)志位:?jiǎn)尾綐?biāo)志

IF:中斷標(biāo)志位

DF:方向標(biāo)志位

其中前六個(gè)為狀態(tài)標(biāo)志位,也叫條件碼,用作條件轉(zhuǎn)移指令中的判斷條件。

后三個(gè)為控制標(biāo)志位,對(duì)相關(guān)的操作起控制作用。

14個(gè)寄存器的內(nèi)容,將要執(zhí)行的指令,將要處理的數(shù)據(jù),被稱作CPU的“現(xiàn)場(chǎng)”,用debug的r命令可以清楚地看到“現(xiàn)場(chǎng)”

二、內(nèi)存的分段組織

計(jì)算機(jī)的基本存儲(chǔ)單位是字節(jié),由8個(gè)二進(jìn)制位組成,8個(gè)位捆綁使用。可用一個(gè)兩位16進(jìn)制數(shù)表示其內(nèi)容。16位CPU一次可以處理兩個(gè)字節(jié)。

為了正確訪問(wèn)內(nèi)存,每一個(gè)存儲(chǔ)器單位即字節(jié)必須給出一個(gè)地址。地址編號(hào)從0開(kāi)始,依次加1,被稱為線性編址

8086的地址線有20根,(詳述)能夠直接訪問(wèn)的地址空間為2^20即1MB。即內(nèi)存的地址編號(hào)可以從0編到1M。用16進(jìn)制數(shù)表示內(nèi)存的物理地址,其地址范圍為00000H~FFFFFH,為5位16進(jìn)制數(shù)。每一個(gè)內(nèi)存單元都有一個(gè)確定的20位物理地址。

但是,16位CPU的字長(zhǎng)為16位,一次只能訪問(wèn)2^16=64k內(nèi)存,如何訪問(wèn)1M的內(nèi)存空間呢,在8086CPU中采用了地址分段的辦法。即每一個(gè)存儲(chǔ)單元的物理地址都有段地址和偏移地址兩部分構(gòu)成。

規(guī)定:(詳述)只有地址為16的整數(shù)倍的物理地址可以作為段地址。這樣,1MB的內(nèi)存空間被分為了1M/16=64K個(gè)段。段地址的特征為xxxx0H。

我們知道了段地址和相對(duì)于段地址的段內(nèi)偏移量(偏移地址)后就可以確定一個(gè)內(nèi)存單元的物理地址了。所謂的偏移地址等于內(nèi)存單元的物理地址減去段地址,不得超過(guò)一段(即64k)。

段地址可以不用20位表示,而用16位表示,即xxxx0H=xxxxH*10H表示為xxxxH,用4位16進(jìn)制數(shù)表示。

物理地址的計(jì)算公式為:

物理地址=段地址*16+偏移地址

或者,物理地址=段地址*10H+偏移地址

乘以16相當(dāng)于左移4位。即段地址左移4位和偏移地址相加。按十六進(jìn)制數(shù)描述為,段地址左移一位和偏移地址相加。通常表示為

物理地址=段地址:偏移地址

例如:02002=0200:0002

可以看出,實(shí)際上偏移地址也是16位的,每一段的最大空間為2^16=64K,這樣,不同的段之間有重疊。也即意味著物理地址可以有不同的表示方法。或者說(shuō)不同的表示方法可以表示同一個(gè)物理地址

例如:02020=0200:0020=0100:1020=0000:2020=0202:0000=......

舉例說(shuō)明:摩天大樓。

注意:實(shí)際上每個(gè)段并不一定占用64k的最大空間。

總結(jié):如此麻煩的做法帶來(lái)的好處是擴(kuò)大了內(nèi)存的表示空間,更重要的是,原本很麻煩的程序的再定位工作變得異常簡(jiǎn)單,實(shí)際上一般的程序員以及高級(jí)語(yǔ)言并不關(guān)心段地址,段地址的分配工作交給操作系統(tǒng)了。

在高級(jí)語(yǔ)言中,變量有兩個(gè)含義:首先表示的是內(nèi)存的偏移地址,對(duì)于占用兩個(gè)以上存儲(chǔ)單元的變量,其地址是低地址,一般為偶數(shù)。其次,表示存儲(chǔ)的內(nèi)容,對(duì)于字?jǐn)?shù)據(jù)(兩個(gè)字節(jié)),其高位存入高地址,低位存入低地址,如

xxxx:0200 2b  ...var

xxxx:0201 01

xxxx:0202 00

xxxx:0203 01

對(duì)于整型變量 var,地址為0200,內(nèi)容為01H*256+2BH=01H*100H+2BH=256+32+11

若為雙字長(zhǎng)整型變量var,則地址一般為4的整數(shù)倍。var的地址為0200,其內(nèi)容為01H*1000000H+01H*100H+2BH=4096+256+32+11。

640K~1M 的內(nèi)存稱為 UMB (upper memory block)

它分為a000H,b000H,c000H,d000H,e000H,f000H六個(gè)段,f000H段為ROM。存放的是ROM-BIOS(加電自檢程序、固化子程序庫(kù)、硬件參數(shù)等)。

加電時(shí),盡管主機(jī)板廠家可以不同,計(jì)算機(jī)總是從 ffff:0000開(kāi)始運(yùn)行,其中存放的總是jmp指令,指向加電自檢程序(post)真正的起始處。

ffff段除了前16個(gè)內(nèi)存單元(物理地址<1M)外,還可以訪問(wèn)地址超過(guò)1M的部分內(nèi)存,這部分內(nèi)存稱為HMA。

三、尋址方式(略)

取得操作數(shù)地址的方式稱為尋址方式。

(1)數(shù)據(jù)尋址

立即尋址:mov al,5

寄存器尋址:mov ax,bx

直接尋址:mov ax,[2000H]

寄存器間接尋址:mov ax,[bx]

寄存器相對(duì)尋址:mov ax,offset[si]

基址變址尋址:mov ax,[bx][di]

相對(duì)基址變址尋址:mov offset[bx][si]

(2)指令尋址

段內(nèi)直接尋址:jmp near ptr label1  //near ptr|short

段內(nèi)間接尋址:jmp word ptr [offset][bp]

段間直接尋址:jmp far ptr label2

段間間接尋址:jmp dword ptr [offset][bx]

(3)端口尋址:

四、指令系統(tǒng)(略)

(一) 指令的執(zhí)行時(shí)間

若時(shí)鐘周期為T(mén),則指令的基本執(zhí)行時(shí)間如下(最佳尋址方式):

傳送mov,     2T

加法add,     3T

整數(shù)乘法imul,      128T~154T

整數(shù)除法idiv,      165T~184T

移位(即乘以2或除以2),      2T

無(wú)條件轉(zhuǎn)移,      15T

條件轉(zhuǎn)移,      不轉(zhuǎn)移 4T   轉(zhuǎn)移 16T

采用不同方式尋址的加法指令執(zhí)行時(shí)間如下:

寄存器到寄存器3T

存儲(chǔ)器到寄存器9T+EA

寄存器到存儲(chǔ)器16T+EA(訪問(wèn)兩次存儲(chǔ)器)

立即數(shù)到寄存器4T

立即數(shù)到存儲(chǔ)器17T+EA(訪問(wèn)兩次存儲(chǔ)器)

不同尋址方式計(jì)算有效地址EA所需時(shí)間:

直接尋址 6T

寄存器間接尋址 5T

寄存器相對(duì)尋址 9T

基址尋址 7T~8T

相對(duì)基址變址尋址 11T~12T

總結(jié):從指令執(zhí)行時(shí)間上看,應(yīng)盡量采用加法,避免乘法,盡量用移位不用乘法

盡量使用寄存器,少用存儲(chǔ)器。盡量用簡(jiǎn)單的尋址方式,少用復(fù)雜的尋址方式。

(二) 指令系統(tǒng)

1.1 mov push pop xchg

1.2 in out xlat

1.3 lea lds les

1.4 lahf sahf pushf popf

注意:mov 等傳送指令相當(dāng)于賦值語(yǔ)句。in/out為基本的端口輸入和輸出

2.1 add adc inc

2.2 sub sbb dec neg cmp

2.3 mul imul

2.4 div idiv cbw cwd

2.5a daa das

2.5b aaa aas aam aad

3.1 and or not xor test

3.2 shl sal shr sal rol ror rcl rcr

4 movs cmps scas lods stos... ...rep repe|repz repne|repnz

5.1 jmp

5.2 jz|je jnz|jne js jns jo jno jp|jpe jnp|jpo jb|jnae|jc jnb|jae|jnc

... ...jb|jnae|jc jnb|jae|jnc jbe|jna jnbe|ja jl|jnge jnl|jge jle|jng jnle|jg

... ...jcxz

5.3 loop loopz|loope loopnz|loopne

5.4 call ret

5.5 int into iret

6.1 clc cmc stc cld std cli sti

6.2 nop hlt wait esc lock

五、匯編程序的格式

(1)匯編語(yǔ)言的語(yǔ)句種類與格式

1 指令語(yǔ)句

標(biāo)號(hào):指令助記符 操作數(shù)1,操作數(shù)2;注釋

2 偽指令語(yǔ)句

名字 偽指令 參數(shù)1,參數(shù)2,...;注釋

符號(hào)定義語(yǔ)句:equ =

數(shù)據(jù)塊定義語(yǔ)句:db dw dd dq dt dup(?)

標(biāo)號(hào)及其屬性:

        分析符type length size offset seg

        標(biāo)號(hào)類型label byte word dword near far

        合成符ptr this

3 宏指令

4 段定義

segment ends

定位類型:para bye word page

組合類型:public common stack memory at 

類別:code data stack 

5 過(guò)程定義

proc endp

6 其他偽定義

assume org end

name title

even

radix 

short high low

+ - * / mod

and or xor not

eq ne lt gt le ge

(2) com 文件格式(略)

code segment public 'code'

     org   100H

     assume cs:code,ds:data,es:data

main proc near

     jmp start

message db 'How are u?$'

start:mov ah,9

      mov dx,offse message

      int 21H

      int 20H

main  endp

code  ends

      end main

(3) exe 文件格式(略)

stack segment stack 'stack'

      db 256dup(?)

stack ends

data segment public 'data'

     ......

data ends

code segment public 'code'

     assume cs:code,ds:data,es:data,ss:stack

main proc far

     push ds         ;保護(hù)psp前綴

     xor  ax,ax

     push ax         ;保護(hù)偏移0地址

     mov ax,data

     mov ds,ax

     mov es,ax

     ......

     ret

main endp

code ends

     end main

六、BIOS中斷和DOS功能調(diào)用(略)

相當(dāng)于高級(jí)語(yǔ)言中的庫(kù)函數(shù)或者系統(tǒng)子程序。

七、debug和匯編語(yǔ)言上機(jī)(略)

posted on 2009-05-30 10:24 大龍 閱讀(533) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲日韩欧美一区二区在线| 亚洲无线一线二线三线区别av| 亚洲国产精品尤物yw在线观看| 蜜桃伊人久久| 99精品欧美一区二区蜜桃免费| 久久精品视频在线| 中国成人黄色视屏| 一级成人国产| 欧美三级第一页| 亚洲欧美伊人| 欧美成人69av| 国产精品一二三| 久久亚洲视频| 亚洲伦伦在线| 亚洲成人在线网站| 男人的天堂亚洲在线| 亚洲激情网站| 日韩一二三区视频| 国产精一区二区三区| 欧美中文字幕不卡| 亚洲一区观看| 亚洲国产专区校园欧美| 亚洲黄色免费网站| 国产欧美日韩麻豆91| 一区二区三区免费看| 1024精品一区二区三区| 日韩视频专区| 欧美色精品天天在线观看视频| 久久青青草综合| 欧美精品免费观看二区| 午夜精品久久久久久久99黑人| 欧美综合二区| 亚洲视频1区2区| 麻豆久久婷婷| 欧美成人视屏| 韩日成人av| 亚洲一区二区在线| 一区二区三区在线高清| av成人福利| 一本色道久久综合狠狠躁篇的优点| 亚洲精品在线观看免费| 亚洲大片av| 老司机一区二区| 亚洲一区二区成人| 欧美日本精品| 亚洲精品韩国| 最新国产成人av网站网址麻豆 | 亚洲国产精品成人一区二区| 亚洲另类黄色| 久久久噜噜噜久久人人看| 国产偷久久久精品专区| 亚洲无限av看| 国产一区二区久久久| 久久久国产成人精品| 久久伊人精品天天| 伊人成年综合电影网| 欧美大片免费观看| 在线视频亚洲一区| 亚洲一区三区视频在线观看| 欧美午夜精品理论片a级大开眼界| 亚洲国产美国国产综合一区二区| 国产一区二区0| 久久成人这里只有精品| 欧美成人免费小视频| 国产日韩一区二区三区在线| 性色av香蕉一区二区| 久久久久.com| 老司机午夜精品视频在线观看| 亚洲人成网站影音先锋播放| 亚洲午夜久久久| 亚洲国产三级网| 狠狠色丁香婷婷综合影院| 欧美色欧美亚洲另类七区| 欧美插天视频在线播放| 欧美专区日韩专区| 亚洲欧美日本国产有色| 一本久久精品一区二区| 亚洲啪啪91| 欧美粗暴jizz性欧美20| 久久久亚洲成人| 久久久噜噜噜| 女主播福利一区| 亚洲激情午夜| 日韩视频三区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美在线播放视频| 午夜精品久久一牛影视| 亚洲一区二区在线| 亚洲伊人伊色伊影伊综合网| 亚洲一区二区三区免费观看| 亚洲欧美精品| 久久久久久夜| 欧美一二区视频| 亚洲人成免费| 欧美1区2区视频| 亚洲第一区色| 久久九九电影| 欧美专区中文字幕| 狠狠色伊人亚洲综合成人| 久久岛国电影| 欧美在线免费观看| 欧美激情视频网站| 欧美国产在线观看| 国产精品一区二区a| 亚洲精品乱码久久久久久日本蜜臀 | 美脚丝袜一区二区三区在线观看 | 亚洲欧美日韩中文播放| 久久米奇亚洲| 欧美一区二区在线看| 国产精品私房写真福利视频| 亚洲啪啪91| 国产伦精品一区二区| 亚洲第一伊人| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲人成在线播放| 欧美大片在线观看| 午夜精彩国产免费不卡不顿大片| 日韩一区二区电影网| 99精品久久久| 国模套图日韩精品一区二区| 国产精品久久久久aaaa九色| 国产精品二区三区四区| 午夜精品影院在线观看| 欧美多人爱爱视频网站| 亚洲精品一区二区三区婷婷月 | 黑丝一区二区| 欧美日韩视频在线一区二区观看视频| 国产伦精品一区二区三区照片91 | 亚洲欧美国产精品桃花| 亚洲高清在线播放| 久久久久欧美| 亚洲第一天堂av| 亚洲免费av片| 国产欧美日韩中文字幕在线| 久久噜噜噜精品国产亚洲综合| 亚洲制服丝袜在线| 黄色日韩网站视频| 欧美激情精品久久久久久蜜臀 | 久久亚洲私人国产精品va| 一本色道久久综合亚洲精品小说| 欧美亚洲综合网| 亚洲国产高清aⅴ视频| 亚洲国产日韩欧美在线动漫| 欧美日韩在线播放| 欧美在线一二三区| 欧美不卡视频| 久久久五月婷婷| 欧美视频网址| 亚洲高清不卡在线观看| 老司机精品视频一区二区三区| 亚洲在线黄色| 久久夜色精品国产欧美乱极品| 亚洲日本久久| 欧美一级久久久| 一区二区三区久久网| 久久青青草综合| 欧美在线网址| 国产日韩欧美一区| 亚洲欧美日韩国产| 亚洲欧美综合v| 欧美香蕉大胸在线视频观看| 亚洲欧洲日产国产综合网| 亚洲视频一区二区| 亚洲人成7777| 欧美第一黄色网| 亚洲国产精品va在线看黑人| 黄色成人av在线| 久久这里只精品最新地址| 久久精品视频在线播放| 国产在线精品二区| 久久久久综合网| 欧美大片在线观看一区二区| 国产精品成人播放| 亚洲欧美另类中文字幕| 久久久不卡网国产精品一区| 经典三级久久| 欧美成熟视频| 亚洲午夜在线视频| 免费欧美视频| 亚洲午夜电影在线观看| 国产精品入口夜色视频大尺度| 欧美一区二区三区在线看| 亚洲成色999久久网站| 夜夜嗨av一区二区三区网页| 欧美日韩一区二区在线观看| 亚洲欧美国产视频| 欧美成人免费在线视频| 性xx色xx综合久久久xx| 亚洲一级影院| 亚洲欧洲综合另类| 伊人成人开心激情综合网| 一区二区欧美国产| 欧美承认网站| 99视频精品免费观看| 亚洲精品中文字幕在线| 国产精品乱人伦中文| 国产丝袜一区二区三区| 狠狠爱综合网| 日韩亚洲欧美在线观看| 午夜欧美大尺度福利影院在线看|