主要跟小甲魚老師的視頻和王爽老師的書學習匯編,膜拜小甲魚老師话侧。
第一章 基礎:
寄存器:cup里的存儲器栗精,存放指令和數據。
存儲器:存放指令和數據瞻鹏。硬盤和內存都是存儲器悲立。
存儲單元(從0開始)
總線:
???? 地址總線:尋址能力,(64位與32位區(qū)別)n根地址(一根1個字節(jié)=1個內存單元)
???? 控制總線:cpu對外界器件的控制
???? 數據總線:決定cpu和外界數據傳送速度
主板:核心器件
接口:cpu不直接控制外部器件新博,通過接口卡控制
存儲器:
????? 隨機存儲器(ram):
????? 只讀儲存器(rom):每種硬件有自己的rom
另:1.不同cpu有不同指令集
?????? 2.不同總線來區(qū)別二進制數據是什么
?????? 3.cpu看到的是邏輯存儲器
檢測點暴露的問題:
??? 1.B:字節(jié)=8b:位
???? 2.一根地址總線對應1B的尋址能力薪夕,一根數據總線對應1bit的數據
第二章 寄存器:(8086cpu)
cpu:內部總線連接
?? 運算器:一次最多處理16位
?? 控制器:
?? 寄存器: 最大寬度16位(數據最大值2的16次方-1)
通用寄存器:4個寄存器(AX,BX,CX,DX)可以分為兩個獨立的8位寄存器。
?????? 高位:H,低位:L
字(word)=2個字節(jié)(16位兼容兩個8位)
例:mov? ax,bx ? ?? 把bx移進ax(支持寄存器赫悄,段寄存器原献,數據,內存到寄存器埂淮,寄存器到段寄存器姑隅,寄存器到內存)(數據到寄存器sp等)
????? add?? ax,bx????? 把bx加進ax
物理地址:內存單元的唯一地址
8086內部16位與外部20位沖突解決方法:內部用兩個16位合成一個20位(段地址+偏移地址)物理地址=段地址*16(二進制左移4位,16進制左移1位)+偏移地址
段:段的劃分來自cpu倔撞,內存并沒有分段讲仰,看需要自己看成不同段
段寄存器(不要忘記*16):
???? CS(代碼段地址):CS*16+IP(代碼偏移地址) ?? ip=ip+讀取的指令長度
修改CS:ip方法:jmp?? 段地址:偏移地址 ? ? ?? jmp ax是令ip=ax
cs+ip決定執(zhí)行與否,指向則執(zhí)行误窖,不指向則不執(zhí)行叮盘。
???? DS(數據段地址):當前操作的數據可以[偏移地址]的方式引用
???? SS(棧寄存器):SS:sp指向棧頂元素(壓入sp-秩贰,推出sp+)(先動數據)
sp指向棧的最高地址上一位。(格式化只是移指針)(椚岷穑空時指到棧外(+2))
?????ES:(備用段寄存器)
另:1.匯編指令不區(qū)分大小寫
??????? 2.從后向前運算
??????? 3.超出位進到其他寄存器(分高低位時高低位之間也無法直接進位:add al,88)
??????? 4.cpu訪問內存必須要物理地址
??????? 5.段地址和偏移地址可以指示2的16次方個內存單元
檢測點暴露的問題:
?????? 1.不加H表示10進制毒费,需要先轉換為16進制;
?????? 2.注意區(qū)分mov 和add愈魏;
?????? 3.sub ax,bx??? 把ax減去bx;
dosbox的一些操作: (加不加空格都行)
? ? ?? 1.r? 查看觅玻、改變cpu寄存器內容 ? r 寄存器(改變寄存器的值為指定值)
??????? 2.d 查看內存中的內容 ? d 段地址:偏移地址 ? n-1(查看該地址開始的n(默認128)個內存單元)
??????? 3.e? 改寫內存中的內容 ? e 起始地址 數據 數據。培漏。溪厘。
??????? 4.u? 將機器指令翻譯為匯編指令
??????? 5.t? 執(zhí)行一條機器指令
??????? 6.a? 以匯編格式寫入機器指令(執(zhí)行匯編) ? a 起始地址(從起始地址開始寫入)
??????? 7.p 執(zhí)行到當前行,有循環(huán)則全部執(zhí)行
? ? ? ? 8.q退出dubug
??????? 9.g 執(zhí)行到某地址;like 斷點
第三章 寄存器(內存):
字的存儲:分進高字節(jié)中(低字節(jié)中存不下的存進高字節(jié))
棧:后入先出
push ax:把ax元素壓進棧中 push [0]把0的數據壓入棧
pop ax:把棧頂推到ax中?????? pop [0]把數據推到0
push和pop指令可以修改寄存器和內存
棧頂越界問題:向上越界和向下越界
另:1.mov指令訪問內存時可以只給出偏移地址(默認ds)
?????? 2.可以用段寄存器表示段地址
?????? 3.debug的t命令在執(zhí)行修改SS的指令時牌柄,下一條指令也緊接著被執(zhí)行
檢測點暴露的問題:
????? 1.movadd操作的數據量和使用的寄存器有關畸悬,相應大小的寄存器調動相應的數據。
????? 2.e? d a命令都是操作內存的,r是直接操作寄存器的珊佣。
????? 3.使用棧時先設定SS:sp(最高位)