乙個字=兩個位元組,即乙個字需要兩個記憶體單元儲存。高位址放高位位元組,低位址放低位位元組。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.彙編指令是指有對應的機器碼的指令,可以被編譯為機器指令,最終...