記憶體中字的儲存:
在0位址處開始存放4e20h這個字(4eh是高位資料,20h是低位資料)
intel的cpu是小尾(小端)順序,也就是說,低位資料存放在低位址的記憶體單元中,高位資料存放在高位址的記憶體單元中。
針對上圖,提出如下問題:
結論:任何兩個位址連續的記憶體單元,n號單元和n+1號單元,可以將它們看成兩個記憶體單元,也可以看成乙個位址為n的字單元中的高位位元組單元和低位位元組單元。
ds和[address]
8086的cpu中有乙個ds暫存器,通常用來存放要訪問的資料的段位址。
例如:我們要讀取10000h單元的內容,可以用如下程式段進行:
mov bx, 1000h
mov ds, bx
mov al, [0]
上面三條指令將10000h(1000:0)中的資料讀到al中。
已知的mov指令可完成的兩種傳送功能:
(1)將資料直接送入暫存器,例如:mov ax, 2000h
(2)將乙個暫存器中的內容送入另乙個暫存器中,例如:mov ax, bx
除此之外,mov指令還可以將乙個記憶體單元中的內容送入乙個暫存器,例如:mov ax, [0]
從哪個記憶體單元送到哪個暫存器中呢?
mov指令的格式:
mov 暫存器名, 記憶體單元位址
「[...]」表示乙個記憶體單元,「[...]」中的「...」表示記憶體單元的偏移位址。
執行指令時,8086cpu自動取ds中的資料為記憶體單元的段位址,然後ds中的內容 * 16 + [...]中的... 構成記憶體單元的實體地址。
細節:mov ds, 1000h這條指令是否正確呢?
答案:不能。
原因:8086cpu不支援將資料直接送入段暫存器的操作,ds是乙個段暫存器,所以,mov ds, 1000h是非法的。這是硬體設計的問題。
訪問方式就是 資料--》通用暫存器--》段暫存器。
問題:寫幾條指令,將al中的資料送入記憶體單元10000h?
結論:mov bx, 1000h
mov ds, bx
mov [0], al
因為8086cpu是16位結構,有16根資料線,所以,可以一次性傳送16位的資料,也就是一次性傳送乙個字。
比如:mov bx, 1000h
mov ds, bx
mov ax, [0] ; 1000:0處的字型資料(因為ax是16位暫存器)送入ax
mov [0], cx ; cx中的16位資料(因為cx是16位暫存器)送到1000:0處
問題3.3:記憶體中的情況如下圖,寫出下面指令執行後暫存器ax, bx, cx中的值。
ax = 1000h bx = ? cx = ?
ax = 1123h bx = ? cx = ?
ax = 1123h bx = 6622h cx = ?
ax = 1123h bx = 6622h cx = 2211h
ax = 1123h bx = 8833h cx = 2211h
ax = 1123h bx = 8833h cx = 8833h
問題3.4:記憶體中的情況如下圖,寫出下面指令執行後暫存器ax, bx, cx中的值。
ax = 1000h bx = ?
ax = 2c34h bx = ?
ax = 2c34h bx = 2c34h
ax = 2c34h bx = 1b12h
第三章執行緒間的通訊第一節
3.1.1不使用等待 通知機制實現執行緒間通訊 3.1.2什麼是等待 通知機制 兩個執行緒完全是主動式地讀取乙個變數,在花費讀取時間的基礎上,讀到的資料並不確定是否是想要的,因此需要 等待通知 機制 3.1.3等待 通知機制的實現 1wait 方法 作用是使當前執行 的執行緒進行等待,該方法是obj...
第三章 第一節 條件判斷語句
本節主要講解python中的條件判斷語句,條件判斷語句在開發中是經常使用到的,通常我們使用條件判斷語句來執行不同的 段。python主要的條件語句有 if語句 if else語句 if elif語句。再學習完這三種條件判斷語句時,我們還會實現switch語句。零 if語句 if語句的語法是這樣的 i...
python小白之路 第三章函式第一節
變數的作用域 當前起作用,可用的範圍區域,也就是變數的有效範圍 在定義或引用時,global 關鍵字 在函式內外都可以使用的變數 在函式內部可以使用的變數,在函式內定義後,外部不能直接用,會報錯 在多層函式裡時,nonlocal 關鍵字來呼叫上層的區域性變數 在函式外定義的變數,在函式內可以使用或操...