組合語言學習09 之資料操作運算子指令

2021-10-01 22:14:14 字數 2598 閱讀 7965

本文主要參考此**內容

inc(增加)和dec(減少)指令分別表示暫存器或記憶體運算元加 1 和減 1。語法如下所示:

inc reg/mem

dec reg/mem

例子:

.data

myword word 1000h

.code

inc myword ; myword = 1001h

mov bx,myword

dec bx ; bx = 1000h

根據目標運算元的值,溢岀標誌位、符號標誌位、零標誌位、輔助進製標誌位、進製標誌位和奇偶標誌位會發生變化。inc 和 dec 指令不會影響進製標誌位。

add 指令將長度相同的源運算元和目的運算元進行相加操作。語法如下:

add dest,source
在操作中,源運算元不能改變,相加之和存放在目的運算元中。該指令可以使用的運算元與 mov 指令相同。下面是兩個 32 位整數相加的短**示例:

.data

val1 dword 10000h

val2 dword 20000h

.code

mov eax,val1 ; eax = 10000h

add eax,val2 ; eax = 30000h

標誌位:進製標誌位、零標誌位、符號標誌位、溢位標誌位、輔助進製標誌位和奇偶標 志位根據存入目標運算元的數值進行變化。

sub 指令從目的運算元中減去源運算元。該指令對運算元的要求與 add 和 mov 指令相同。指令語法如下:

sub dest, source
下面是兩個 32 位整數相減的短**示例:

.data

var1 dword 30000h

var2 dword 10000h

.code

mov eax,var1 ;eax = 30000h

sub eax,var2 ;eax = 20000h

neg(非)指令通過把運算元轉換為其二進位制補碼,將運算元的符號取反

使用 add、sub 和 neg 指令,就有辦法來執行組合語言中的算術表示式,包括加法、減法和取反。換句話說,當有下述表示式時,就可以模擬 c++ 編譯器的行為:

rval = -xval + (yval - zval)

;

現在來看看,使用如下有符號 32 位變數,組合語言是如何執行上述表示式的。

rval sdword ?

xval sdword 26

yval sdword 30

zval sdword 40

轉換表示式時,先計算每個項,最後再將所有項結合起來。首先,對 xval 的副本進行取反,並存入暫存器:

; first term: -xval

mov eax,xval

neg eax ; eax = -26

然後,將 yval 複製到暫存器中,再減去 zval:

; second term: (yval - zval)

mov ebx,yval

sub ebx,zval ; ebx = -10

最後,將兩個項(eax 和 ebx 的內容)相加:

; add the terms and store:

add eax,ebx

mov rval,eax ; -36

type 運算子返回變數單個元素的大小,這個大小是以位元組為單位計算的。比如,type 為位元組,返回值是 1;type 為字,返回值是 2;type 為雙字,返回值是 4;type 為四字,返回值是 8。示例如下:

.data

var1 byte ?

var2 word ?

var3 dword ?

var4 qword ?

下表是每個 type 表示式的值:

lengthof 運算子計算陣列中元素的個數,元素個數是由陣列標號同一行出現的數值來定義的。示例如下:

.data 

byte1 byte 10,20,30

array1 word 30 dup (?),0,0

array2 word 5 dup(3 dup(?))

array3 dword 1,2,3,4

digitstr byte "12345678",0

組合語言學習

參考書籍 組合語言 王爽 著 清華大學出版社 選單導航 一 彙編基礎知識 二 暫存器和常見彙編指令演示 一 基礎知識 1 彙編指令是機器指令的助記符,同機器指令一一對應 2 每一種cpu都有自己的彙編指令集 3 cpu可以直接使用的資訊在儲存器中存放 4 在儲存器中指令和資料沒有任何區別,都是二進位...

組合語言學習

持續更新 彙編指令 1.mov指令 mov是乙個傳送指令,可以實現以下操作 有一點需要注意,資料不能直接傳給段暫存器,比如mov ds,100h就是錯誤的。但是可以將其他暫存器中的值賦給段暫存器。段暫存器有cs,ds,ss,es等。如果你想知道為什麼,那就可以去了解一下關於每條指令的硬體實現。後面還...

組合語言 學習資料(更新 )

學彙編不是說一定要用這玩藝做多牛鼻的事情,問題的關鍵在於,學透了彙編會使你真正理解計算機另外一方面,如上面所說,在工作中你遲早會在某個陰暗的角落遇到彙編.不管你承認不承認,現在的cpu沒有直接跑高階語言的,哪怕是虛擬機器也都是類似彙編的指令集.當遇到崩潰分析,效能優化甚至編譯器抽風等等的時候,彙編是...