組合語言 王爽(01)

2022-06-23 23:27:10 字數 2011 閱讀 3510

8086 cpu 有20位地址匯流排,cpu 一次只能傳輸16位

地址加法器採用 ------實體地址 = 段地址 * 16 + 偏移地址

ds

讀取 10000h單元中的內容:

mov bx,1000h  //

mov ds,bx  //    錯誤示範 mov ds,1000h,8086cpu不支援直接將資料輸入到段 暫存器中

mov al,[0]  // [.....]中的 0  標示記憶體單元的偏移地址

// 8086 cpu 自動取 ds 中的資料為記憶體單元的段地址

寫入資料到10000h:

mov bx,1000h

mov ds,bx

mov [0],al

mov 、add、sub指令

mov 指令有以下幾種形式

mov  暫存器,資料

mov 暫存器,暫存器

mov 暫存器,記憶體單元

mov 記憶體單元,暫存器/段暫存器

mov 段暫存器,暫存器/記憶體單元

mov    暫存器,段暫存器

add sub,缺少對段暫存器的操作

棧是一種具有特殊的訪問方式的儲存空間,---------最後進入的資料最先出去。lifo (last in frist out)

push(入棧)以字為單位進行

pop(出棧)

ss 段暫存器------------棧頂的段地址

和sp暫存器------------偏移地址***************===ss:sp指向棧頂元素

mov ax,1000h

mov ss,ax

mov sp,0010h  //棧底

mov ax,001ah

mov bx,001bh

push ax  // 入棧指令 sp-2

push bx

sub ax,ax

sub bx,bx

pop bx

pop ax  // 出棧指令 sp+2

編寫第一個程式

assume cs:codesg

codesg segment

start :mov ax,0123h

mov bx,0456h

add ax,bx

add ax,ax

mov ax,4c00h

int 21h

codesg ends

end

dosbox 使用方法:見網頁--------->>>>>

程式的除錯方法:debug   +  r  

cx:表示程式的長度

.dos系統中.exe檔案中的程式載入過程:

u 命令顯示機器碼及其對應的地址