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 命令顯示機器碼及其對應的地址