彙編小程序實例詳細解釋——IBM彙編

由於快要期末考試了,我也準備開始本學期的專業課彙編語言的學習了hh(原諒我菜 orz)

彙編很強,讓我知道了計算機的cpu在進行工作時都是用加法來完成的

所以聰明的計算機工程師們將世間萬物的計算通過數學方法來轉換成加法運算,所以彙編語言讓我瞭解了些許底層的知識,同時我在網上搜索題目時,發現對於彙編詳細解釋的例子太過於少了,導致比較燒腦,所以我在弄明白之後就想着寫一篇關於彙編簡單計算的小例子來展示彙編的魅力,也可以供新生參考。

例題:(V-(X*Y+Z-540))/X

這是個簡單的小例題:

mov ax,X    首先將x的值賦值到ax通用寄存器中
imul Y ;X*Y  imul是帶符號的乘法在這聲明一下:由於原先的字長爲16位這裏也涉及到了字乘法,16位*16位答案一定是32位的,

所以用兩個寄存器來分別存儲該數據的高16位和低16位,所謂的“高”“低”在我看來就是中間平分左邊就是高右邊就是低
mov cx,ax ;cx寄存器來存儲低16位
mov bx,dx ;由於在16位與16位相乘的過程中,機器自動爲用戶把高16位分到DX的通用寄存器,但是下面還需要用到高16位,

所以得挪地方來保存高16位寄存器下面的圖片表達了這一點!!!
mov ax,Z ; 然後對ax寄存器賦值
cwd 這句是把ax帶符號擴展成dx,ax。爲什麼這樣做?先接着往下看……
add cx,ax ;將剛纔擴展的雙字保存在bx,cx中,因爲馬上要用到ax、、我們一定要優先進行低16位的加法運算所以用add 
adc bx,dx ;然後再把原先的高16位和剛拓展好的Z的高16位相加但是此處是ADC說明要加上低16位的進位符如果低16位有進位就加上,沒有進位加0
sub cx,540 ;這也如此因爲16位二進制完全能保存540的大小所以只在低16位相減
sbb bx,0 同加法的原理相同
mov ax,V

繼續轉化爲雙字來計算
cwd 
sub ax,cx; -V 
sbb dx,bx 
idiv X ;/X

我們一直在努力,加油!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章