將某記憶體單元資料做乘法 記憶體間資料的複製

2021-10-10 07:46:25 字數 1494 閱讀 1960

計算ffff:0006單元中的數,乘以三,並將結果儲存在ds中

分析:(1)運算後的結果是否會超出dx所能儲存的範圍?

ffff:0006單元的數是乙個位元組型資料,範圍在0~ffh,乘以3結果不會大於64kb,可以在dx中存放下。

(2)用迴圈累加實現乘法,用哪個暫存器累加?

將ffff:0006單元的數賦值給ax,用dx進行累加。先設dx=0,然後累加三次

(3)ffff:6單元是乙個位元組單元,ax是乙個十六位暫存器,資料的長度不一樣,如何賦值?

設ffff:0006單元中的資料是xxh,若要ax中的值(資料的大小)和ffff:0006單元中的相等,ax中的資料應該為00xxh。所以,若實現ffff:0006向ax賦值,應該令ah=0,al=ffff6h

注意:在彙編源程式中不能以字母開頭,前面要加個零。

assume cs:code

code segment

mov ax,0ffffh

mov ds,ax

mov bx,6 ;以上設定ds:bx指向ffff:6

mov al,[bx]

;al=ffff6h

mov ah,0 ;以上,設定al=ds*16+bx=ffff6h, ah=0

mov dx,0 ;累加暫存器清零

mov cx,3 ;迴圈三次

s: add dx,ax

loop s

mov ax,4c00h

int 21h

code ends

end

題目:將記憶體ffff:0~ffff:f記憶體單元中的資料複製到0:200 ~ 0:20f中程式設計的時候要搞清楚,資料從哪來,要放到哪去。還要注意初始化

方法一:

方法一中push ds,但是沒有設定棧段,比較危險哦!

方法二:

方法二中不斷修改ds,很浪費cpu的操作

優化:方法三:

引入es暫存器(和資料相關)——》

個人程式設計習慣:

將ds代表資料從哪來

es表示資料到哪去

該方法要迴圈16次——》實現從位元組型資料複製——》如何實現字型資料的複製

再優化:

方法四:

程序間資料共享 檔案與記憶體的對映

程序間資料共享 檔案與記憶體的對映 在執行strace c nginx的時候,我們可以看出mmap mprotect和munmap使用的比例是很高的。因此可以看出nginx執行的時候有很大一部分時間在處理檔案與記憶體之間的對映。mmap在呼叫程序的虛擬位址空間中建立乙個新的對映。include vo...

記憶體空間,資料型別,static作用

記憶體圖 一 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結...

單元測試 使用 Effort 記憶體資料庫 報錯

單元測試中 使用 effort 記憶體資料庫,可能會遇到兩個錯誤 1.no entity framework provider found for the ado.net provider with invariant name effort.provider 這個報錯,是告訴我們沒有引用effor...