筆記——第二章

@(讀書筆記)[匯編語言, 王爽]

前置知識

  1. 8086寄存器為16位,為了和以前的8位架構(gòu)的CPU兼容,把寄存器可以邏輯上分為兩部分——高位和低位。比如通用寄存器AX,BX,CX和DX都可以分為AH,AL,BH,BL,CH,CL,DH和DL。
  2. 由此而來的,CPU可以一次性對兩種尺寸的數(shù)據(jù)進行處理。一種是字節(jié)(Byte),是8位結(jié)構(gòu),也就是8個bit組成;另一種是字(word),由兩個字節(jié)組成,把它分為高字節(jié)位和低字節(jié)位,是16位。于是8086的寄存器里可以一次存儲一個字或者兩個字節(jié)。
    注意 00101010 11010001 這一串二進制碼前面為高位,后面為低位。第0位數(shù)是從右往左數(shù)的,也就是1,而不是0。
  3. 也因為字和字節(jié)的不同,匯編指令要注意操作數(shù)的位數(shù)應(yīng)當一致。比如MOV AX,BL就是錯誤的,因為BL只有8位,而AX有16位。
  4. 還要注意的是,當我們對al進行操作的時候,al是一個獨立的8位寄存器來使用,和ah沒有關(guān)系。比如在al和某數(shù)相加需要進位時,寄存器是不會給ah加上1的。但是若時ax做加減,那么al和ah之間是會有進位和退位的??傊灰唵蔚卣J為ax=ah+al。

物理地址

由于內(nèi)存需求比較大,需要的地址總線會比CPU內(nèi)部總線多。8086中地址總線是20位,而CPU一次只能處理16位。為了合成20位的內(nèi)存地址,設(shè)計了一個段地址*16+偏移地址=物理地址的機制。

  • 物理地址是指每一個內(nèi)存單元在計算機系統(tǒng)內(nèi)存空間里唯一的內(nèi)存地址。

段寄存器

CS:IP

這是代碼段寄存器。CS代表當前指令所在物理地址的段地址,ip代表偏移地址。這是一個默認的配對,不能認為修改。

于是指令執(zhí)行的具體過程是:從CS和IP中讀取數(shù)據(jù),送入CPU中的地址加法器得到物理地址,然后通過外部地址總線找到該物理地址指向的內(nèi)存單元,讀取到指令送回CPU中的指令緩沖器中,然后給IP加上該指令的長度,將IP從指向當前要執(zhí)行的指令的內(nèi)存地址改成指向下一條指令的內(nèi)存地址。最后通過執(zhí)行控制器執(zhí)行指令。

注意:這里是先改變IP,然后再執(zhí)行指令。這一點在當指令中有改變IP值的命令時,尤為重要。改變IP不能用MOV,得用jmp。

語法代碼示例

mov ax,2000h
mov cs,ax  //改變cs的值

jmp 2ae3:3  //執(zhí)行后cs=2ae3,ip=3
jmp ax  //執(zhí)行后ip為ax里的值
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容