把一位16進位制數轉化為對應的ASCII碼

2021-06-01 01:48:45 字數 3420 閱讀 2563

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。回答完畢,望採納!把一個小數的小數點向右移動一位後,得到...