匯編語言 寄存器內(nèi)存訪問原理解析
這篇文章主要介紹了匯編語言 寄存器內(nèi)存訪問原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
在內(nèi)存中字的存儲

這段話的主要意思是:一個字=2B=16bit,CPU中是用兩個內(nèi)存單元儲存一個字(假如獲取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

結論:就是我上面說的,字型數(shù)據(jù)就是它和它的下一位地址單元的數(shù)據(jù)(數(shù)據(jù)由高地址位向低地址位讀)
數(shù)據(jù)段寄存器DS和偏移量[address]
用法和cs和ip差不多,都是段寄存器的值*16+偏移量的值
為給DS數(shù)據(jù)段寄存器值
因為CPU的段寄存器都比較害羞,沒法給他們直接賦值(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ù)據(jù)段,具體來看下是怎樣操作數(shù)據(jù)段的
累加123B0H~123BAH的內(nèi)存單元的操作

小結:
(1)字在內(nèi)存中存儲時 ,要用兩個地址連續(xù)的內(nèi)存單元來存放,字的低位字節(jié)存放在低地址單元中,高位字節(jié)存放再高地址單元中。
(2)用 mov 指令要訪問內(nèi)存單元,可以在mov指令中只給出單元的偏移地址,此時,段地址默認在DS寄存器中。
(3)[address]表示一個偏移地址為address的內(nèi)存單元。
(4)在內(nèi)存和寄存器之間傳送字型數(shù)據(jù)時,高地址單元和高8位寄存器、低地址單元和低8位寄存器相對應。
(5)mov、add、sub是具有兩個操作對象的指令。jmp是具有一個操作對象的指令。

(2) 內(nèi)存中的情況如圖3.6所示
各寄存器的初始值:cs=2000h,ip=0,ds=1000h,ax=0,bx=0;
① 寫出CPU執(zhí)行的指令序列(用匯編指令寫出)。
② 寫出CPU執(zhí)行每條指令后,CS、IP和相關寄存器的數(shù)值。
③ 再次體會:數(shù)據(jù)和程序有區(qū)別嗎?如何確定內(nèi)存中的信息哪些是數(shù)據(jù),哪些是程序?

答案:我以為jmp了以后cp的值也會改變,實際上就是它jmp的內(nèi)個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 |
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
UEFI開發(fā)實戰(zhàn)SlimBootloader中調(diào)用FSP
這篇文章主要為大家介紹了UEFI開發(fā)實戰(zhàn)SlimBootloader中調(diào)用FSP基礎教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
匯編語言功能字符串大小寫轉(zhuǎn)換實現(xiàn)實例詳解
這篇文章主要為大家介紹了匯編語言功能大小寫轉(zhuǎn)換實現(xiàn)的實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2021-11-11
iOS匯編入門教程之在Xcode工程中嵌入?yún)R編代碼的方法
在Xcode中嵌入?yún)R編代碼主要依賴了C語言支持通過 __asm__ 引入?yún)R編代碼的功能。這篇文章主要介紹了iOS匯編入門教程之在Xcode工程中嵌入?yún)R編代碼的方法,需要的朋友可以參考下2020-02-02
匯編語言80x86系統(tǒng)通用數(shù)據(jù)傳送指令詳解
這篇文章主要為大家介紹了匯編語言80x86系統(tǒng)通用的數(shù)據(jù)傳送指令詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11

