為什麼組合語言中MOV指令佔3位ADD指令佔兩位

2021-03-04 05:46:20 字數 2774 閱讀 3977

1樓:匿名使用者

不對呀,如果是51的話,mov指令佔一位、兩位、三位的都有,add指令也有佔一位和兩位。

如:mov a,r0 佔一位

mov a,#20h 佔兩位

mov 30h,40h 佔三位

add a,r1 佔一位

add a,#23h 佔兩位

2樓:匿名使用者

這些都是規定死的東西。屁股太大了乙個座位做不下去的。

3樓:匿名使用者

這個都是intel定死的。沒有為什麼。

4樓:燕陣希冬蓮

abcdb

100dup(?)mov

cx,100lea

bx,abc第三句

可以寫成

movbx,

abc嗎?為什麼?還有就是加中括號

和不加中括號有什麼區別?老是搞不清!小弟剛剛開始學習組合語言!請前輩解答!謝謝!!

急~~~求助組合語言中mov指令和add指令用法

5樓:匿名使用者

1、linux和windows的**編寫是不一樣的,linux上的彙編風格是at&t風格,而windows上的彙編風格是intel風格。 其中的乙個區別是intel 風格是關於源運算元和目的運算元的。以第乙個為例

//windows上的寫法

mov eax, data4

//linux上的寫法

movl data4, eax

所以,你使用的哪個平台你得鬧明白。

2、如果是彙編**,直接用識別符號就好,還是不同的風格問題,如果按你寫的立即數模式。

//windows上的寫法

mov eax, -1000

//linux上的寫法

movl $-1000, eax

在linux的at&t彙編風格中,它這個立即數是必須要加上$ 表示乙個常量。 這個也是為什麼你在c語言中一般不能使用$來做為識別符號的乙個原因哦。

建議:查一下intel風格和at&t風格的彙編區別點。問題都很簡單,為了更好的幫助你,我上傳了乙份,詳細介紹intel組合語言程式設計的電子書,中文版的,希望能幫到你!

組合語言中add加法指令的問題

6樓:閭丘芷荷乙曾

1.0ac72h只是乙個表示方法,跟ac72h是一樣的含義。ax裡還是儲存16位的值。

之所以在前面多加乙個0,是因為編譯器不識別以字母開頭的立即數。

算是立即數表示的一種規則吧,或者可以理解為是一種語法規則。

只要是十六進位製數的(最後加h),首位又是字母的,必須前面新增個0。

這樣也不容易引起歧義。

如果不習慣加0,那mov

al,dh這個指令怎麼識別呢?

是把8位暫存器dh裡的值交給al?還是把十六進位製數0dh交給al呢。。。

所以建議你養成這樣的習慣。

2.0f表示溢位,實際上是把add指令作為有符號數加法指令。ax開始是正數(最高位0),bx也正數,相加結果超過了能識別的最大正數(7fffh),所以溢位了。

7樓:革盼秋宇恬

89h+

89h=

112h,而al最大是ffh,產生溢位後就生產丟失現象,只保留低位。

要想不丟失,可改為:

xorah,ah

addax,al

則ax是正確的112h

其他高階語言也一樣,在宣告變數和計算時要考慮數字溢位問題(宣告的是short型變數,給的卻是int型值,得到的也只會是short型的值即丟失或報錯)

8樓:做而論道

無論,是有符號還是無符號的,演算法都是相同的。

即:89h + 89h = (1)12h。

相當於無符號:137 + 137 = 274 = 256 + 18。 256 即為進製 1。

相當於有符號:(-119) + (-119) = +18。 溢位,結果無效。

換乙個數,再試試,有符號數,也可以得出正確的結果。

9樓:匿名使用者

不是的,雖然算數運算指令主要用來對8位無符號資料進行算術操作,但也同樣用於帶符號數的。

在加法運算中,若位7有進製,則進製位cy置1,否則清0;若位3有進製,則半進製位ac置1,否則清0。若看作2個帶符號數相加,還需判斷溢位位ov;若ov為1,表示和數溢位。

例如:a=aeh,r1=81h,執行指令「add a,r1」,則操作如下所示。

1 0 1 0 1 1 1 0

+ )1 0 0 0 0 0 0 1

——————————

1 0 0 1 0 1 1 1 1

結果:a=2fh,cy=1,ov=1,ac=0,p=1。

此例中,若把aeh、81h看作無符號數相加,則結果為12fh(在看作無符號數時,不考慮ov位);若將上述2值看作有符號數,則有「2個負數相加得到正數」的錯誤結論,此時,ov=1,表示有溢位,指出了這一錯誤。

希望能幫到你。

10樓:匿名使用者

無符號數的範圍是0-255,有符號數是-128 - 127.應該預設是無符號數,另外標誌暫存器裡有個of位它是針對有符號數的,如果是mov al,7fh add al,1 of位會置1 顯示有符號數溢位,因為7fh+1=128大於了有符號數的表示範圍。

11樓:夕見的

將al的內容直接相加(注意的是要進行的是十六進位制的加法,而不是十進位制的)後送到al暫存器中

組合語言中db指令的意義,組合語言中DB指令的意義

db作為組合語言中的偽操作命令,它用來定義運算元佔用的位元組數。在這裡b是byte的縮寫,即位元組,所以,該偽操作所定義的每個運算元佔有1個位元組 8位 如 message db hello 此時,字串 hello 中每個字元會佔用1個位元組,51微控制器中,用於定義位元組的內容。db 指令以表示式...

組合語言中b表示什麼,組合語言中 BX 表示什麼

您好,很高興為您解答。bx 表示的是乙個偏移位址。比如你ds 1000h的話。mov bx,1 那麼 mov ax,bx 那麼他就會尋找 段位址1000,偏移位址為0001h 的資料放入到ax中 mov ax,bx bx 這種方式叫做暫存器間接定址方式。即把 bx 指向的位址中的內容,送入ax暫存器...

組合語言中的dec是什麼意思,組合語言中的DEC是什麼意思

組合語言中,dec是減1指令,該指令使運算元的內容減1,然後再送回該運算元。該運算元可以是暫存器運算元 儲存器運算元。例如 dec al al內容減1,然後再送aldec ax ax減內容1,然後再送ax dec cont cont減內容1,然後再送cont 00h 30h 30h,30h位址在什麼...