汇编寄存器(内存访问)基础知识之三---mov指令
?1 內存中字的存儲
一個字型數據占2個內存單元,內存里面一個內存單元一個字節(jié)(8位),高地址單位放高8位,低地址單元放低8位。
注意:0號是地址單元,1是高地址單元(上是低地址,下面是高地址)
(1) 2地址單元中存放的 字節(jié)型 數據是 12H
(2)2地址單元的存放法 字型 數據是 0012H (字型要2個字節(jié))
(3) 1地址單元的存放的 字型 數據是 124EH
結論:
任何2個地址連續(xù)的內存單元,N號和N+1號,可以看成2個內存單元,
也可以看成一個地址為N的字單元中的高字節(jié)單元(n+1)和低位字節(jié)單元(n)
一個字型數據占2個內存單元,內存里面一個內存單元一個字節(jié)(8位),高地址單位放高8位,低地址單元放低8位。
cpu要讀取一個內存單元的時候,要先給出這個內存單元的地址
DS寄存器(數據段寄存器),存放要訪問的數據的段地址
mov指令的可以完成3種傳送:
(1)數據直接送入寄存器
(2)一個寄存器的內容送入另一個寄存器
(3)可以將一個內存單元中的內容送入一個寄存器
mov指令的格式:
mov 寄存器名,內存單元地址
[...]表示一個內存單元,[....]中的0表示內存單元的偏移地址是0
但是內存單元的段地址是: cpu自動取ds中的數據為內存單元的段地址
mov ds,1000H 表示是錯誤的,
因為8086CPU不支持將數據直接送入段寄存器,
但是直接可以送入通用寄存器,這是硬件設計的問題
數據--》通用寄存器--》段寄存器
從哪個內存單元送到哪個寄存器中呢?
例如: 將數據從內存中單元送入寄存器(AH 是AX 的高8位,AL 是AX 的低8位)
mov bx,1000H
mov ds,bx
mov al,[0] //偏移地址0放到al里面 ,[ ... ]表示一個內存單元, [ ...]里的0表示內存單元的偏移地址是0
上面指令是從1000H(1000:0)中的讀數據
思考:如何將數據從寄存器送入內存單元:
mov bx,1000H
mov ds,bx
mov [0],al
2 ?字的傳送:
8086cpu是16位結構,有16根數據線,所以一次性可以傳送16位的數據,也就是一次性傳送一個字(2個字節(jié),2個16進制=1個字節(jié),2個字節(jié)=4個16進制)
比如:
mov bx,1000H
mov ds,bx
mov ax,[0] //1000:0 處的字 型數據(一個字=2個字節(jié))傳入
mov [0],cx //cx 中的16位數據送到1000:0處
?
一個字型數據占2個單元,內存里面一個內存單元一個字節(jié)(8位)
測試:
?
修改命令是 e 1000:0 23 11 22 66
寫入命令( a CS:IP)
t執(zhí)行命令
結果是
分析說明:
?
3: mov add , sub(減法)指令
mov指令的幾個形式:
mov 寄存器,數據 比如 mov ax,8
mov 寄存器,寄存器 比如 mov ax,bx
mov 寄存器,內存單元 比如 mov ax,[0]
mov 內存單元,寄存器 比如 mov [0],ax
mov 段寄存,寄存器 比如 mov ds,ax
? add和sub形式和mov指令類似,
說明:sub ax,ax和mov ax,0 功能一樣;區(qū)別是 ?sub的機器碼是2個字節(jié),mov的機器碼是3個字節(jié)
?
?小結:
(1)字在內存中存儲時,要在2個連續(xù)的內存單元(一個單元一個字節(jié))來存放。字的低位字節(jié)存放在低地址單元中,高為字節(jié)存放在高地址單元中
(2)用mov指令訪問內存單元,可以在mov指令中給出單元的偏移地址,此時,段地址默認在DS寄存器中
(3)[address]表示一個偏移地址為address的內存單元
(4)在內存和寄存器之間傳遞 字型 數據時,高地址單元和高8位寄存器,低地址單元和低8位寄存器想對應
(5)mov ,add,sub具有2個操作對象的指令,jmp是具有一個操作對象的指令
?
?
轉載于:https://www.cnblogs.com/DonAndy/p/6090859.html
總結
以上是生活随笔為你收集整理的汇编寄存器(内存访问)基础知识之三---mov指令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信网名符号昵称大全
- 下一篇: 谁有暮光之城4的百度网盘资源,求分享下!