Linux 之 AT&T匯編語言 mov、add、sub指令、數據段


mov指令的幾種形式:

mov 寄存器、 數據
mov ax,8888

mov 寄存器、 寄存器
mov bx,ax

mov 寄存器、 內存單元
mov ax,[0]

mov 內存單元、寄存器
mov [0],ax

mov 段寄存器、寄存器
mov ds,ax

add和sub指令和mov一樣,都有2個操作對象。

sub和add類似,不過是相減,
sub ax,9 給ax減9,之后的結果賦值給ax
sub ax,bx 語意是ax = bx - ax
sub ax,[0] 將偏移地址為0的內存單元 - ax 再賦值給ax

試一下:能不能用他們直接操作段地址? (試過了,不行)

3.5 數據段
前面講過,對於8086 PC機,我們可以根據需要將一組內存單元定義為一個段(可以是代碼段,數據段等)

如何訪問內存中的數據段呢?
將一段內存當作數據段,是我們在編程時的一種安排,我們可以在具體操作的時候,
用DS存放數據段的段地址,再根據需要,用相關指令訪問數據段中的具體單元

mov ax,123BH
給AX寄存器里放123BH
mov ds,ax
將123BH送入DS中,作為數據段的段地址。
mov ax,0
用AX存放累加結果

add ax,[0]
將數據段的第一個字,(偏移地址為0),加到AX中,會把1也拖過去做高位字節,因為0那里是八位的數據,要湊齊16位的,

add ax,[2]
將數據段的第三個字(0.1.2),(偏移地址為2),加到AX中去,會把3也拖過去。
add ax,[4]
將數據段的第五個字(0.1.2.3.4),(偏移地址為4),加到AX中去,會把5也拖過去。

3.1~3.5,
字在內存單元中存儲時,要用兩個地址連續的內存單元來存放
字的低位字節存放在低地址單元,高位字節存放在高地址單元中。

用MOV指令要訪問內存單元的時候,可以在MOV指令中只給出單元的偏移地址。
此時,段地址默認在DS寄存器中。

在內存和寄存器之間傳送字型數據時,高地址單元和高8位寄存器,低地址單元和低8位寄存器相對應。

mov,add,sub是具有兩個操作對象的指令,jmp是具有一個操作對象的指令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM