1樓:匿名使用者
al: 0040h bl:0026h //關注的是aladd ah,bl //卻把bl加到ah高位,得到的:
ax的值2640h,
al的值40h
ah的值26h
組合語言: mov ax,oo1ah mov bx,0026h add al,bl add ah,bl ------------->到這裡 ah為什麼等於2640h?
2樓:匿名使用者
計算過程如下:
mov ax,001ah ;ax=1ah,ah=0 ,al=1ah
mov bx,0026h ;bx=0026h,bh=0,bl=26h
add al,bl ;al=1ah+26h=40h
add ah,bl ;ah=0+26h=26h;ah=26h,al=40h,ax=2640h看懂了嗎?
3樓:陳坤坤
上面說的很正確 關鍵你要明白 ax bx 都是通用暫存器,其中ax 是16位 分別包含兩個八位ah,al
bx一樣 並且算的結果是用十六進位制算的 逢16進一 懂不
請問組合語言 這道題是什麼思路?al bl ah bh 這是什麼意思? 還有怎麼計算啊?
4樓:匿名使用者
這幾條彙編指令其實並沒有完成任何結構性的功能,最多隻是給學習者演示一下cpu暫存器在彙編指令的執行過程中如何變化,如何運算而已,故談不上什麼思路。
al:ax暫存器(16位暫存器)的低位位元組;
bl:bx暫存器(16位暫存器)的低位位元組;
ah:ax暫存器(16位暫存器)的高位位元組;
bh:bx暫存器(16位暫存器)的高位位元組;
示例中的彙編語句是以8位位元組的形式訪問暫存器的:
add al,bl ;ax低位元組+bx低位元組 結果送al
add ah,bl ;ax高位元組+bx低位元組 結果送ah
add bh,al ;bx高位元組+ax低位元組 結果送bh
mov ah,0 ;將0賦值給ah
add al,85h ;ax低位元組+85h 結果送al
add al,93h ;ax低位元組+93h 結果送al
結果ax=0158h
5樓:匿名使用者
很少有彙編指令沒有完成任何建構函式,同比增長只是為了演示到學習者的cpu暫存器的彙編指令在執行過程中,如何改變,如何計算有什麼想法,到目前為止。
al:ax暫存器的低位元組(16位暫存器);
bl:低位元組的的bx暫存器(16個暫存器);
ah:ax暫存器(16位暫存器)位元組;
的bh:高位元組的的bx暫存器(16個暫存器),例子彙編語句的基礎上的8個位元組的形式訪問暫存器:
新增al bl斧頭低位元組+ bx低位元組的傳送人加啊,bl斧頭高位元組+ bx低位元組送啊
人;新增bh,bx高位元組+ ax的低位元組傳送bhmov ah,0 0分配給啊
新增al,85h;
新增人。斧頭+85 h的低位元組,傳送人,93h;斧頭低字第93?傳送人
結果ax = 0158h
6樓:月晞
al屬於低位累加器,
ah屬於高位累加器,bl屬於低位基址暫存器,bh屬於高位基址暫存器,h表示十六進位制數
mov ax,001ah /將001a存入ax中,此時al為1a,ah為00
mov bx,0026h /將0026存入bx中,此時bl為26,bh為00
add al,bl /求al+bl,結果存入al中,al=40
add,ah,bl /求ah+bl,結果存入ah中,ah=26
add bh,al /求bh+al,結果存入bh中,bh=1a
mov ah,0 /將ah清0
add al,85h /求al+85,結果存入al中,al=c5
add al,93h /求al+93,結果存入al中,al=58
7樓:匿名使用者
沒什麼意義,也許是計算序列號,或者加密的什麼演算法指令吧
組合語言中add加法指令的問題
8樓:閭丘芷荷乙曾
1.0ac72h只是一個表示方法,跟ac72h是一樣的含義。ax裡還是儲存16位的值。
之所以在前面多加一個0,是因為編譯器不識別以字母開頭的立即數。
算是立即數表示的一種規則吧,或者可以理解為是一種語法規則。
只要是十六進位制數的(最後加h),首位又是字母的,必須前面新增個0。
這樣也不容易引起歧義。
如果不習慣加0,那mov
al,dh這個指令怎麼識別呢?
是把8位暫存器dh裡的值交給al?還是把十六進位制數0dh交給al呢。。。
所以建議你養成這樣的習慣。
2.0f表示溢位,實際上是把add指令作為有符號數加法指令。ax開始是正數(最高位0),bx也正數,相加結果超過了能識別的最大正數(7fffh),所以溢位了。
9樓:革盼秋宇恬
89h+
89h=
112h,而al最大是ffh,產生溢位後就生產丟失現象,只保留低位。
要想不丟失,可改為:
xorah,ah
addax,al
則ax是正確的112h
其他高階語言也一樣,在宣告變數和計算時要考慮數字溢位問題(宣告的是short型變數,給的卻是int型值,得到的也只會是short型的值即丟失或報錯)
10樓:做而論道
無論,是有符號還是無符號的,演算法都是相同的。
即:89h + 89h = (1)12h。
相當於無符號:137 + 137 = 274 = 256 + 18。 256 即為進位 1。
相當於有符號:(-119) + (-119) = +18。 溢位,結果無效。
換一個數,再試試,有符號數,也可以得出正確的結果。
11樓:匿名使用者
不是的,雖然算數運算指令主要用來對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,表示有溢位,指出了這一錯誤。
希望能幫到你。
12樓:匿名使用者
無符號數的範圍是0-255,有符號數是-128 - 127.應該預設是無符號數,另外標誌暫存器裡有個of位它是針對有符號數的,如果是mov al,7fh add al,1 of位會置1 顯示有符號數溢位,因為7fh+1=128大於了有符號數的表示範圍。
13樓:夕見的
將al的內容直接相加(注意的是要進行的是十六進位制的加法,而不是十進位制的)後送到al暫存器中
反彙編問題,反彙編問題
這兩個反匯編出來的語句是一樣的。1.你這是8051系列微控制器的彙編,我想你是知道這一點的。2.你用的工具採用了按字 16個二進位制位也就是兩個位元組 的方式顯示資料,而且是高位元組在前。也就是說你給的兩條指令,如果按51的傳統來看的話應該分別是 21 ff 和 21 00,其中21 是指令 mov...
什麼是組合語言,什麼是彙編和組合語言?
組合語言就是計算機語言,它是有0,1組成的.通俗的說就是我們人和計算機交流的語言.介於機器語言和高階語言之間的一種 什麼是彙編和組合語言?彙編語copy言是一種低階計算bai機程式語言,說 低階du 並不是指語言的功能和複雜程度,而是它zhi出現在計算機發展史dao的早期,但現在仍廣泛應用於計算機開...
應該怎麼學彙編,怎麼學習彙編
不要急於寫彙編程式,先學著用偵錯程式,比如od 32位的 debug 真實模式 的,我描述用od。因為od可以直接在裡面寫上彙編指令,並能單步執行,即能看到效果,現在的組合語言怎麼說呢?對應用程式開發的程式設計師來說,很大程度上是應用於除錯。當然如果你是cracker。或者玩shellcode。那可...