參考:《匯編語(yǔ)言》 王爽 第一,二章
匯編本質(zhì)就是為了方便程序員,把二進(jìn)制代碼用匯編指令來(lái)表示
匯編指令---------------->編譯器 ---------------->機(jī)器碼---------------->計(jì)算機(jī)執(zhí)行
mov ax, bx 100010001
................ ...............
匯編由下面3類指令組成
(1)匯編指令:如mov, add 等,有著對(duì)應(yīng)的機(jī)器碼.
(2)偽指令:沒有對(duì)應(yīng)的機(jī)器碼,由編譯器執(zhí)行,計(jì)算機(jī)不執(zhí)行
(3)其他符號(hào):如+、-、*、/ 等由編譯器識(shí)別,沒有對(duì)應(yīng)的機(jī)器碼。
指令和數(shù)據(jù),存在存儲(chǔ)器中沒有區(qū)別。比如同一段二進(jìn)制1000100111011000
cpu可以把它看作指令 mov ax, bx 也可以看作數(shù)據(jù) 89D8H
字節(jié):由8位組成
字(word):計(jì)算機(jī)在同一時(shí)間內(nèi)處理的一組二進(jìn)制數(shù)稱為一個(gè)計(jì)算機(jī)的“字”,大小由cpu決定,如8086cpu就是16位即2個(gè)字節(jié)。
字長(zhǎng):就是字的長(zhǎng)度。
存儲(chǔ)單元:存儲(chǔ)器被劃分成若干個(gè)存儲(chǔ)單元,大小為8位即一個(gè)字節(jié)。如內(nèi)存最小單元就是一個(gè)字節(jié),[0]中就是一個(gè)字節(jié)。
外部總線
地址總線:決定CPU的尋址能力。8086CPU有20根地址總線尋址能力是2^20即1MB。
數(shù)據(jù)總線:決定CPU與其他器件(如內(nèi)存,顯卡)進(jìn)行數(shù)據(jù)傳輸?shù)膫鬏斄俊?086CPU有16根地址總線(就是字長(zhǎng))。
控制總線:決定CPU對(duì)系統(tǒng)中其他器件(如內(nèi)存,顯卡)的控制能力。
電腦由很多器件組成。如內(nèi)存條,網(wǎng)卡,顯卡。他們都有內(nèi)存的。它們都與cpu總線相連。CPU對(duì)它們進(jìn)行讀或?qū)懙臅r(shí)候都是通過(guò)控制線發(fā)出內(nèi)存讀寫命令。也就是說(shuō)CPU在操 控它們的時(shí)候,把它們都當(dāng)作內(nèi)存看待,把它們總的當(dāng)作一個(gè)由若干存儲(chǔ)單元組成的邏輯存儲(chǔ)器,這個(gè)存儲(chǔ)器就是內(nèi)存地址空間(就是說(shuō)CPU的地址空間,不僅僅是內(nèi)存條的內(nèi)存,而是電腦上所有的存儲(chǔ)器)
如:
00000~9FFFF 主存地址空間(內(nèi)存條)
9FFFF~A0000 顯存地址空間
C0000~FFFFF 各類ROM地址空間(如主板BIOS,顯卡BIOS)
前面講的總線都是對(duì)cpu外部來(lái)講的外部總線。cpu 的運(yùn)算器、控制器、寄存器都是靠?jī)?nèi)部總線相連的
運(yùn)算器:進(jìn)行信息的處理
存儲(chǔ)器:進(jìn)行信息存儲(chǔ)
控制器:控制各個(gè)器件進(jìn)行各種
對(duì)于匯編程序來(lái)說(shuō),CPU中主要的部件是寄存器。
如8086CPU有14個(gè)寄存器:
ax, bx, cx, dx, si, di, sp, bp, ip, cs, ss, ds, es ,psw
ax,bx,cx,dx, 用來(lái)存放一般數(shù)據(jù)。大小是16位即2個(gè)字節(jié)
cs是代碼段地址寄存器
ip是指令指針寄存器,存放偏移地址
ds是數(shù)據(jù)段寄存器
ax,bx,cx,dx, 用來(lái)存放一般數(shù)據(jù)。大小是16位即2個(gè)字節(jié)
8086CPU為了兼容上一代的8位CPU,ax,bx,cx,dx都可以分成兩個(gè)獨(dú)立的寄存器
AX 可分為 AH (AX的高8位)和 AL(AX低8位)
同理BX 可分為 BH 和BL 、CX 可分為CH 和 CL 、DX可分為DH和AL
mov ax, 18 ax=0018H
mov ah, 78 ah=0078H
add ax, 8 ax = ax+008H
mov ax, bx ax = bx
add ax, bx ax = ax + bx
8086CPU地址總線有20根,而8086是16位的CPU,只能一次性處理傳輸和暫時(shí)存儲(chǔ)16位。
8086CPU采用了用兩個(gè)16位地址合成一個(gè)20位物理地址的方法就是:
物理地址 = 段地址 * 16 + 偏移地址
8086CPU 有4個(gè)段寄存器 CS、DS、SS、ES
(1)cs和ip
cs是代碼段地址寄存器
ip是指令指針寄存器,存放偏移地址
不能用 mov cs, 1000H mov ip, 0 來(lái)修改段寄存器
要用jmp指令如
jmp 2AE3:3 把cs改成2AE3H 把ip改成003H
如果只想改ip用如下指令
jmp 0 或者jmp ax
特別注意: cs=0001H ip=0000H
與 cs=0000H ip=00010H 是同一個(gè)地址 ,因?yàn)槲锢淼刂?= 段地址 * 16 + 偏移地址相同。不要以為cs不同物理地址就不同。
可以通過(guò)《匯編語(yǔ)言》 王爽 的實(shí)驗(yàn)一來(lái)了解寄存器的工作
關(guān)鍵詞: 匯編入門基礎(chǔ)知識(shí)寄存
網(wǎng)站首頁(yè) |網(wǎng)站簡(jiǎn)介 | 關(guān)于我們 | 廣告業(yè)務(wù) | 投稿信箱
Copyright © 2000-2020 hngelin.com All Rights Reserved.
中國(guó)網(wǎng)絡(luò)消費(fèi)網(wǎng) 版權(quán)所有 未經(jīng)書面授權(quán) 不得復(fù)制或建立鏡像
聯(lián)系郵箱:920 891 263@qq.com
吉首市| 莱阳市| 苍山县| 会同县| 丰县| 紫金县| 莱阳市| 陆河县| 板桥市| 克东县| 马尔康县| 鹤庆县| 南投市| 迁安市| 西盟| 麦盖提县| 股票| 平凉市| 定日县| 波密县| 固始县| 明水县| 蓝田县| 旌德县| 黔南| 布尔津县| 鲁甸县| 滨海县| 广元市| 襄城县| 拜城县| 兰溪市| 永新县| 体育| 新和县| 离岛区| 二手房| 孝义市| 贵南县| 和平县| 金山区|