組合語言是如何區分有符號運算和無符號運算的

時間 2022-06-26 09:20:03

1樓:流弊的名字

宣告:8086機器語言裡只有加法運算。其他所有運算都是建立在加法之上。

我們理解中的有符號數/無符號數+有符號數/無符號數=得到的結果是一樣的,這個結果同時影響著cf和of。

如果我們把它看成有符號數,那麼對於8位暫存器,就把最高位看成符號位,具體數字取後七位,所以取值範圍是-128~127。超出了就改變了of。

如果我們把它看成了無符號數,那麼對於8位暫存器來說,沒有符號位,8個位置就都是真實結果,並且一定是正數。所以取值範圍是0~255。超出了就改變了cf。

所以你說的這三種情況,都是一樣的運算過程,得到的結果同時作用於flag的所有位。當你把它看成這三種運算中的任意一種,都符合這種運算得到的結果

2樓:永恆

加減運算指令並不分有無符號,完全在於程式設計者程式設計邏輯的把控。

有符號數之間相加、無符號數之間相加都好理解;有符號數和無符號數相加就不好理解了,你要麼把它們都當有符號數,要麼都看成無符號數進行計算。

3樓:沙里波特

組合語言是如何區分有符號運算和無符號運算的???

①有符號數+有符號數

②有符號數+無符號數③無符號數+無符號數

這幾組怎麼區分的???那麼**是如何影響sf標誌位的呢???

不論程式設計者怎麼定義資料,cpu 都是按照普通的二進位制來計算。

然後,給出結果,以及標誌:cf、of、zf、sf。

那麼,程式設計者,對資料,應該怎麼定義呢?

這個,你可以隨意的。

但是,你把有符號數、無符號數,放在一起相加,你想得出什麼結果呢?

呵呵,你也太隨意了吧?

無符號數和有符號數在匯程式設計序裡如何區分?

4樓:會飛的小兔子

在匯程式設計序裡是沒有無符號數和有符號數區分的。

加減運算指令是不區分有符號和無符號的,在計算機對有符號整數的表示只採取一種編碼方式,不存在正數用原碼,負數用補碼的問題。

在組合語言裡宣告變數的時候,沒有signed和unsignde之分,彙編器全部將輸入的整數字面量當作有符號數處理成補碼存入到計算機中,只有這乙個標準,並且全部彙編成補碼。也就是說,db-20彙編後為:ec,而db236彙編後也為ec。

db是分配乙個位元組,乙個位元組能表示的有符號整數範圍是:-128~+127,那麼db236超過了這一範圍,+236的補碼的確超出了乙個位元組的表示範圍,那麼拿兩個位元組是可以裝下的,應為:00ec,也就是說+236的補碼應該是00ec,乙個位元組裝不下。

00ec是兩個位元組,被截斷成ec,當把236當作無符號數時,它彙編後的結果正好也是ec。

擴充套件資料無符號數和有符號數的使用

#include

#include

intmain()

5樓:仁昌居士

無符號數和有符號數在匯程式設計序裡區別為:識別符號不同、二進位制不同、範圍不同。

一、識別符號不同

1、無符號數:無符號數在宣告變數的時候,帶unsigned識別符號。

2、有符號數:有符號數在宣告變數的時候,帶signded識別符號。

二、二進位制不同

1、無符號數:無符號數在編譯時,轉為二進位制,所有數字用作數值位,代表數值。

2、有符號數:有符號數在編譯時,轉為二進位制,用最高位作為符號位,「0」代表「+」,「1」代表「-」 ;其餘數字用作數值位,代表數值。

三、範圍不同

1、無符號數:若機器字長為n+1位,無符號數的範圍為0~2^(n+1)。

2、有符號數:若機器字長為n+1位,有符號數的範圍為-2^n+1~2^n。

6樓:匿名使用者

加減運算指令是不區分有符號和無符號的,程式設計人員自己要心理有數。計算機對有符號整數的表示只採取一套編碼方式,不存在正數用原碼,負數用補碼這用兩套編碼之說,大多數計算機內部的有符號整數都是用補碼,就是說無論正負,這個計算機內部只用補碼來編碼!!!只不過正數和0的補碼跟他原碼在形式上相同,負數的補碼在形式上與其絕對值的原碼取反加一相同。

7樓:匿名使用者

最高位為1時負數,最高位為0是整數。10000000是-12810000001是-12711111111是-1即處理器的補碼方式:如果運算元是8位先確定二進位制00000000~01111111為十進位制0~127,然後按位取反加1即是它的負數。

補碼中每個負數取反加1而且也是它的正數。例子:二進位制00010000是十進位制的16,那麼-16就是11101111(取反)+1=11110000。

10000000是負多少呢?找取反加1:01111111+1=10000000=128,所以是-128。

組合語言如何判斷是有符號運算,還是無符號運算?

組合語言中,計算機如何識別是否為有無符號運算

8樓:做而論道

讓-127加1的話

那麼這個結果的sf暫存器值到底是0還是1,--是1。

為什麼這樣執行後sf暫存器的值預設為0(也就是有符號數的正數)--是1。

--為什麼你說是0?

不是應該為1嗎 ??

--是1。

127加1等於-126,sf應該是1才對

--對。

9樓:笑談詞窮

按照補碼運算規則,有符號和無符號的數值結果都是一樣,對於無符號數運算,影響的標誌位是「進/借位」、「零」;對於有符號數運算,影響的標誌位是「溢位」、「負」、「零」。

cpu不識別運算元是否有符號,實際上也沒法識別,所以cpu可以把運算元同時作為「有符號」和「無符號」進行運算,對「進/借位」、「溢位」、「負」、「零」 這4個標誌都有影響。

如果認為運算是無符號的,就判斷「進/借位」、「零」標誌,忽略「溢位」、「負」標誌,如果認為運算是有符號的,就判斷「溢位」、「負」、「零」標誌,忽略「進/借位」標誌。各種條件跳轉指令就是這個作用。

組合語言中的有符號數和無符號數有區別嗎

10樓:永恆

肯定是不一樣的:

1、表達的數值範圍不同。比如兩位元組的有符號整數範圍為-32768~32767,最高位為符號位;兩位元組的無符號整數範圍為0~65535,最高位仍為數值位。

2、算術運算時採用的指令可能也不同。如:無符號數採用mul、div指令;有符號數採用imul、idiv指令。

3、比較運算時採用的指令也可能不同。如:jc、ja、jb指令用於無符號數的比較;jl、jg指令用於有符號數的比較。

.......

組合語言中的有符號數和無符號數有區別嗎?怎麼知道是有符號數和無符號數?

11樓:邶逸求磊

有符號數和無符號數有區別嗎?

--使用組合語言編寫程式時,數字是寫給人看的,有正負號(+、-),就是有符號數。

--沒有,則是無符號數。

--這些數字,經過編譯,生成了機器碼,這就是給cpu看的,這時,就沒有區別了。

怎麼知道是有符號數和無符號數?

--程式中的數,看符號即可。

--如果是機器碼,分不清楚的,誰存的,誰才能知道。

什麼是組合語言,什麼是彙編和組合語言?

叢依波弘瀾 組合語言 assembly language 是面向機器的程式設計語言。在彙編語閤中,用助記符 memoni 代替操作碼,用地址符號 symbol 或標號 label 代替地址媽。這樣用符號代替機器語盲的二進位制碼,就把機器語音變成了組合語言。於是組合語言亦稱為符號語言。使用組合語言編寫...

什麼是組合語言,什麼是彙編和組合語言?

組合語言就是計算機語言,它是有0,1組成的.通俗的說就是我們人和計算機交流的語言. 介於機器語言和高階語言之間的一種 什麼是彙編和組合語言? 揚落 彙編語copy言是一種低階計算bai機程式語言,說 低階du 並不是指語言的功能和複雜程度,而是它zhi出現在計算機發展史dao的早期,但現在仍廣泛應用...

組合語言關於OF益出和有符號問題

小虎愛數電 7eh是01111110b,而22h是00100010b,兩數均為正數 相加會溢位 超過127 10h是00010000b為正數,而90h是10010000b為負數 相加不會溢位 溢位只會發生在兩個正數相加 兩個負數相加 或者一正一負相減 al是8位,你先看你的第一段 mov al,10...