1樓:慄慈
補充:之前第一段話說的有問題,所以修改了下,如下:(另外提交的時候沒注意,第一個兄弟的回答已經是正確的了^_^)
主要思想是0~9轉為對應的ascii碼時加30h,而a,b,c,d,e,f則加37h,比30h多出來的7h就是通過adc(多加了cf的01h)以及daa(多加了06h)實現的。
先說對0~9的,以5為例,
and al,0fh
add al,90h
變為95h
daa這個時候的daa,由於95h低位,高位都小於9,且無進位,所以不變
adc al,40h
95h + 40h + cf = d5h
daa低位不變,高位大於9,所以加60h,變為35h,且cf = 1
最終結果為35h,即字元5對應的ascii碼53.
然後是a~f,以c為例:
and al,0fh
add al,90h
變為9ch
daa這個時候的daa,先看低位,由於低位是c,大於9,所以加06h,結果變為a2h,再看高位,高位a,大於9,所以加60h,變為02h,cf = 1(有進位)
adc al,40h
adc操作,02h + 40h + cf = 43h
daa此時43h低高位都小於9,所以無變化。最後結果43h,也即c的ascii碼67
2樓:匿名使用者
這段程式的難點就是daa的作用:
如果al的低4位大於9或af=1,則al的內容加06h,並將af置1;然後如果al的高4位大於9或cf=1,則al的內容加60h,且將cf置1。如果兩個都不滿足,則將af,cf清零。
1. 如果al的值是0-9,那麼:
add al,90h ---------al變成90-99h
daa ---------al不變
adc al,40h ---------al為d0-d9
daa ---------al加上60h,變成30-39h,正是0-9的ascii碼。
2. 如果al的值是a-f,那麼:
add al,90h ---------al變成9a-9fh
daa ---------al加6,高4位變a,所以再加60h,成00-05,且cf=1
adc al,40h ---------al為41-46h,正是a-f的ascii碼。
daa ---------al不變
3樓:
理解daa的操作,就不難明白
以下擷取自intel手冊,應該已經很清楚了,無需更多描述old_al <- al;
old_cf <- cf;
cf <- 0;
if (((al and 0fh) > 9) or af <- 1)then
al <- al + 6;
cf <- old_cf or (carry from al <- al + 6);
af <- 1;
else
af <- 0;
fi;if ((old_al > 99h) or (old_cf = 1))
then
al <- al + 60h;
cf <- 1;
else
cf <- 0;fi;
4樓:匿名使用者
4個2進位制位為一個16進位制數,2進位制1111為16進位制f,2進位制中千位的1=8,百位的1=4,十位的1=2,個位的1=1,將各個位的數作相應轉換再相加,的到的數就是10進位制數0-15,可輕鬆轉換成16進位制。如01011100,可看成是兩組2進位制數0101和1100,則這個數就是16進位制的5c。
10轉16:
100以內一點的10轉16心算比較快,複雜的用「計算器」算了。10轉16用傳統的計算方式可以了,就是大於15小於256的10進位制數除以16為的值為十位的16進位制數,其餘數為個位的16進位制數,沒餘數則個位為0。如61的16進位制是3d,61除以16得3餘13,3作十位數,13轉成d為各位數。
16轉10:
用相反的道理,將十位數乘以16加上個位數。如5a,將5乘以16得80,加上a的10進位制10,結果是90。
如何把一位16進位制的數轉換成對應的ascii碼 2
5樓:小米地瓜來
補充:之前第一段話說的有問題,所以修改了下,如下:(另外提交的時候沒注意,第一個兄弟的回答已經是正確的了^_^)
主要思想是0~9轉為對應的ascii碼時加30h,而a,b,c,d,e,f則加37h,比30h多出來的7h就是通過adc(多加了cf的01h)以及daa(多加了06h)實現的。
先說對0~9的,以5為例,
and al,0fh
add al,90h
變為95h
daa這個時候的daa,由於95h低位,高位都小於9,且無進位,所以不變
adc al,40h
95h + 40h + cf = d5h
daa低位不變,高位大於9,所以加60h,變為35h,且cf = 1
最終結果為35h,即字元5對應的ascii碼53.
然後是a~f,以c為例:
and al,0fh
add al,90h
變為9ch
daa這個時候的daa,先看低位,由於低位是c,大於9,所以加06h,結果變為a2h,再看高位,高位a,大於9,所以加60h,變為02h,cf = 1(有進位)
adc al,40h
adc操作,02h + 40h + cf = 43h
daa此時43h低高位都小於9,所以無變化。最後結果43h,也即c的ascii碼67
用查表的方法將一位十六進位制數轉換成相應的ascii碼。
6樓:藏風之處
我教你。
mov ah,41h
int 21
你去看看輸出了什麼。
很簡單 去尋找ascll表
每個字元對應一個16進位制的值。
只要把他輸出就是字元。懂了嗎?
授人以魚不如授人以漁。
7樓:匿名使用者
16進位制數 二進位制數
f 00001111e 000011109 00001001
16進位制字串如何轉換為對應的ascii碼
8樓:折柳成萌
使用這個方
法可以傳進去的16進位制的數字組成的字串轉化為回utf-8格式的答字串
public static string tostringhex1(string s) catch (exception e)
}try catch (exception e1)return s;}
python把16進位制字串轉化為16進位制數字比如
這個轉了十進位制又轉了十六進位制,都是string,而不是數值 print出來,是以string 輸出的。分享一個我以前的 比如hex.log 裡面是e3f2a1 就要往檔案out.bin裡寫 0xe3 0xf2 0xa1 import string hex file name hex.log bi...
把小數的小數點向左移動一位,得到的數比原數少297,原數是多少
原數 297 1 0.1 297 0.9 330 297 10 1 10 330 把一個數的小數點向左移動兩位得到的數比原來少297,原數是多少?這個數原是100 向左移動2位,就是除100,用100 1 1 100 100 0.99 99 答 得到的數比原來少99 解 小數點移動後的數是原數的10...
把小數的小數點向右移動一位,得到新數,與原數相差40 5,原數是多少
40.5 10 1 40.5 9 4.5 原數 40.5 10 1 4.5 把一個小數的小數點,向右移動一位,得到一個新數,原數相差40.5,原數是多少 小數點向右一位,得到數比原數大十倍,與原數差40.5,則9倍原數 40.5,原數為4.5。回答完畢,望採納!把一個小數的小數點向右移動一位後,得到...