第三章 第一節

2021-06-02 14:28:18 字數 1752 閱讀 7120

記憶體中字的儲存:

在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 關鍵字來呼叫上層的區域性變數 在函式外定義的變數,在函式內可以使用或操...