組合語言學習筆記3(王爽)

2021-08-10 23:08:14 字數 1251 閱讀 7445

乙個字=兩個位元組,即乙個字需要兩個記憶體單元儲存。高位址放高位位元組,低位址放低位位元組。8086cpu為16位結構,有16位資料線,一次性可傳輸16位資料,也就是說對記憶體一次性操作兩記憶體單元即為乙個字。

ds暫存器通常用來存放cpu要訪問資料的段位址,[...](eg:[0])表示記憶體單元的偏移位址。

mov bx,1000h

mov ds,bx

mov al, [0]

上面的3 條指令將1000:0中的資料讀到al 中。

注意:8086cpu不支援將資料直接送入暫存器。

cpu棧機制:一段以棧方式訪問的記憶體單元(先進後出),在任意時刻ss:sp指向棧頂元素。ss:sp指向的元素是在棧中的(用來判斷空棧sp值)!

入棧和出棧指令:push ax (sp=sp-2,將ax中資料送入棧中) pop ax(出棧一次送入ax中,sp=sp+2)push和pop等棧操作指令修改的只是sp,所以棧頂變化範圍最大是0~ffffh

小問題:

(1) 將 10000h-10000fh 這段空間當作棧, 初始狀態棧是空的;

(2)設定 ax=001ah, bx=001bh;

(3)將 ax、 bx中的資料入棧;

寫下彙編指令畫出記憶體狀態圖

注意一下記憶體圖:涉及要點一次操作乙個字,高位和低位擺放,先進後出原則

乙個簡單的匯程式設計序:

assume cs:codesg

codesg segment

mov ax,0123h

mov bx,0456h

add ax,bx

add ax,ax

mov ax,4c00h

int 21h

codesg ends

end彙編源程式包涵兩種指令:彙編指令、偽指令。彙編指令是有對應的機器碼的指令, 可以被編譯為機器指令, 最終為cpu所執行。 而偽指令沒有對 應的機器指令,最終不被cpu所執行。  偽指令是由編譯器來執行。

一:1、***x segment 2、 ***x ends(定義乙個段名字為***x、從1開始從2結束)

二:end彙編結束標誌

以上是偽指令

mov ax,4c00h

int 21h

這兩段是程式返回指令

編譯:masm、連線:link

組合語言 王爽 學習筆記

1 mov a,b a b不能同時為一記憶體位址!2 bx bp si di 在 中,這4個暫存器可以單個出現,或只能以4種組合出現 bx和si bx和di bp和si bp和di。如組合 bx si idata 就是合法的。另外,順便說明一點,si di不能分成兩個8位暫存器使用。3 div指令 ...

組合語言 王爽 筆記

關於pop的知識 1.出棧後,ss sp指向新的棧頂,pop操作前的棧頂元素中的資料仍然存在,但是,它已不再棧中 2.ss和sp只記錄了棧頂的位址,依靠ss和sp可以保證在入棧和出棧時找到棧頂 3.當棧滿的時候再次使用push指令入棧,棧空的時候再次使用pop指令出棧,都將發生棧頂越界問題,它是非常...

組合語言 王爽 筆記

1.乙個組合語言程式從寫出到最終執行的簡要過程 編寫,編譯連線,執行 2.可執行檔案中包含兩部分內容 一是程式 從源程式中的彙編指令翻譯過來的機器碼 和資料 源程式中定義的資料 二是相關的描述資訊 eg 程式的大小,要佔的記憶體空間等 3.彙編指令是指有對應的機器碼的指令,可以被編譯為機器指令,最終...