這篇文章主要介紹了匯編語(yǔ)言 寄存器內(nèi)存訪問原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
在內(nèi)存中字的存儲(chǔ)
這段話的主要意思是:一個(gè)字=2B=16bit,CPU中是用兩個(gè)內(nèi)存單元儲(chǔ)存一個(gè)字(假如獲取0地址存放的字型數(shù)據(jù),就是獲取它的高位字節(jié)0+1位和低位字節(jié)0位的數(shù)據(jù),數(shù)據(jù)由高地址位向低地址位讀)
問題:
(1)0地址單元中存放的字節(jié)型數(shù)據(jù)是多少? # 20H
(2)0地址字單元中存放的字型數(shù)據(jù)是多少? # 4e20H
(3)2地址字單元中存放的字節(jié)型數(shù)據(jù)是多少? # 12H
(4)2地址單元中存放的字型數(shù)據(jù)是多少? # 0012H
(5)1地址字單元中存放的字型數(shù)據(jù)是多少? # 12aEH
結(jié)論:就是我上面說(shuō)的,字型數(shù)據(jù)就是它和它的下一位地址單元的數(shù)據(jù)(數(shù)據(jù)由高地址位向低地址位讀)
數(shù)據(jù)段寄存器DS和偏移量[address]
用法和cs和ip差不多,都是段寄存器的值*16+偏移量的值
為給DS數(shù)據(jù)段寄存器值
因?yàn)镃PU的段寄存器都比較害羞,沒法給他們直接賦值(cs代碼寄存器用的是jmp cs:ip),所以段寄存器采用以下方法賦值
字的傳送
問題1:
內(nèi)存中的情況如下圖,寫出下面指令執(zhí)行后寄存器ax,bx,cx中的值?
解析:
問題2:
內(nèi)存中的情況如下圖,寫出下面指令執(zhí)行后寄存器ax,bx,cx中的值?
解析:
NB的move指令
sub,add指令
數(shù)據(jù)段
我們上面操作的實(shí)際上就是數(shù)據(jù)段,具體來(lái)看下是怎樣操作數(shù)據(jù)段的
累加123B0H~123BAH的內(nèi)存單元的操作
小結(jié):
(1)字在內(nèi)存中存儲(chǔ)時(shí) ,要用兩個(gè)地址連續(xù)的內(nèi)存單元來(lái)存放,字的低位字節(jié)存放在低地址單元中,高位字節(jié)存放再高地址單元中。
(2)用 mov 指令要訪問內(nèi)存單元,可以在mov指令中只給出單元的偏移地址,此時(shí),段地址默認(rèn)在DS寄存器中。
(3)[address]表示一個(gè)偏移地址為address的內(nèi)存單元。
(4)在內(nèi)存和寄存器之間傳送字型數(shù)據(jù)時(shí),高地址單元和高8位寄存器、低地址單元和低8位寄存器相對(duì)應(yīng)。
(5)mov、add、sub是具有兩個(gè)操作對(duì)象的指令。jmp是具有一個(gè)操作對(duì)象的指令。
(2) 內(nèi)存中的情況如圖3.6所示
各寄存器的初始值:cs=2000h,ip=0,ds=1000h,ax=0,bx=0;
① 寫出CPU執(zhí)行的指令序列(用匯編指令寫出)。
② 寫出CPU執(zhí)行每條指令后,CS、IP和相關(guān)寄存器的數(shù)值。
③ 再次體會(huì):數(shù)據(jù)和程序有區(qū)別嗎?如何確定內(nèi)存中的信息哪些是數(shù)據(jù),哪些是程序?
答案:我以為jmp了以后cp的值也會(huì)改變,實(shí)際上就是它jmp的內(nèi)個(gè)CP:IP
指令序列 |
CS |
IP |
DS |
AX |
BX |
|
初始值 |
2000h |
0 |
0 |
0 |
0 |
|
1 |
mov ax,6622h |
2000h |
3h |
0 |
6622h |
0 |
2 |
jmp 0ff0:0100 |
ff0h |
100h |
0 |
6622h |
0 |
3 |
mov ax,2000h |
ff0h |
103h |
0 |
2000h |
0 |
4 |
mov ds,ax |
ff0h |
105h |
2000h |
2000h |
0 |
5 |
mov ax,[8] |
ff0h |
108h |
2000h |
c389h |
0 |
6 |
mov ax,[2] |
ff0h |
10bh |
2000h |
ea66h |
0 |
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持html5模板網(wǎng)。