組合語言 簡單的16位二進位制相加程式

2021-10-03 12:12:27 字數 1502 閱讀 4654

這可以說是第乙個我自己寫的匯程式設計序,雖然很短。。

功能很簡單,實現兩個16位二進位制數相加即可。

下面是實現功能的相應**:

dseg	segment

data_1 dw ?

data_2 dw ?

dseg ends

sseg segment stack

top_ptr db 20

dup(0)

sseg ends

cseg segment

assume ds : dseg, ss : sseg, cs : cseg

beg_: mov ax, dseg

mov ds, ax

mov ax, sseg

mov ss, ax

mov sp, length top_ptr

mov data_1,

0a1a1h

mov data_2,

1a1ah

mov ax, word ptr data_1

add ax, word ptr data_2 ;final answer in 'ax' register

mov ah,

4ch int 21h

cseg ends

end beg_

可以看到彙編**和高階語言比起來確實是要冗長不少的,甚至會讓人覺得有一點刻板。但是這也正是它得優點和魅力所在,這些特點也恰巧表明了彙編的高度嚴格,嚴謹,要編寫好的匯程式設計序需要我們提前合理的編排程式,進行總體規劃,方能實現複雜的功能。

再來看標誌暫存器:

第乙個狀態為nv表示進行的這一次計算沒有發生溢位,結果可以被我們正常使用。

第二、三個狀態是方向標誌和中斷標誌狀態,這裡不做討論。

第四個標誌位是ng,表示最高位為1。

第五個標誌位是nz,表示運算結果不為零。

第六個狀態位是na,表示沒有發生低四位向高四位的進製。

第七個狀態位是pe,表示結果中1的個數為偶數。

第八個狀態位是nc,表示沒有發生最高位向自然位的進製。

我們再在此基礎上加上乙個數讓它發生溢位來看一次標誌暫存器的變化情況。

可以看到我給bbbbh加上乙個4445h得到的結果如ax中所示,為0000h。

如果bp參與到定址當中,則段暫存器預設為ss,其他情況幾乎均為ds。

a指令:編寫**的指令,不需要經過繁瑣的彙編,鏈結,在執行等過程,可以在debug模式下直接進行編寫。

d指令:檢視段內容,後面加上段跨越符就可以檢視任意段的內容。

t指令:單步執行。

p指令:單步執行,遇到子程式或者中斷程式一次性執行完。

r指令:檢視或者修改暫存器內容。

u指令:將機器**進行反彙編得到彙編**。

1 6(二進位制)

學習機器語言是與計算機溝通的基礎。組合語言通過編譯器轉化成機器語言。問題 返回值存哪,返回值大於四個位元組的存哪,大於四個位元組不用指標存哪 環境用vc6 更好的學習細節 1.對進製的初理解,進製的定義,進製的書寫 2.進製的運算 每乙個進製體系都是完美的,在運算時不需要轉換成十進位制在運算 例如 ...

二進位制 16進製制 補碼

逢2進1的計數規則 格式 編寫時要加0b int 0b 輸出2進製 integer.tobinarystring system.out.println integer.tobinarystring n 輸出10進製 integer.tostring system.out.println intege...

二進位制位運算

與運算,6 3 2 或運算 6 3 7 異或運算 6 3 5 反碼 6 7 左移 3 2 12 3 2 2 12 右移 3 1 1 3 2 1 無符號右移 3 1 1 3 2 1 按位與,當兩位同時為1時才為1如 1 1 1 1 0 0 0 1 0 6 3相當於 0110 0011 0010 2 按...