一位元組BCD碼轉ASCII碼的演算法及原始碼

2021-08-31 08:02:53 字數 726 閱讀 5555

一位元組壓縮bcd碼是兩位0~9的數字,4位二進位制數對應一位bcd碼。所以關鍵是要將兩個4位二進位制數分離開來。「分離」可以用移位指令和邏輯運算指令來實現,然後用加30h的加法,便可以得到相應的ascii碼。

1. 這裡有個問題,30h從**來?很簡單,ascii都是固定的,起始數字0對應的ascii是30h,數字1對應的ascii碼數21h,數字2對應的ascii碼數22h......所以單個數字的ascii碼對應在30h和39h之間,而1位bcd(四位二進位制數)碼對應的高位和低位,存放的剛好已經是0h~9h的值,剛好是對應數字1-9,所以直接加上30h就好了。

2.需要注意高低位的移位操作就可以了。

3.彙編**如下:

data segment

bccd-buf db 96h

asc-buf db 2dup (?)

data ends

code segment

assume cs:code,ds:data

start:mov ax,data

mov ds,ax

mov al,bcd-buf

mov bl,al

mov cl,4

shr al,cl

add al,30h

mov asc-buf,al

and bl,0fh

add bl,30h

mov asc-buf+1,bl

code ends

end start

彙編 ASCII碼轉BCD碼並輸出

datas segment nums db 30h,31h,41h,38h,39h,32h,33h,36h,31h ascii碼 numo db 4 dup dlen nums datas ends codes segment assume cs codes,ds datas start mov a...

3位元組起始碼和4位元組起始碼

if next bits 24 0x000001 zero byte f 8 start code prefix one 3bytes f 24 根據b.1節,可以看到所謂的4位元組起始碼是 zero byte 3位元組起始碼 那麼看zero byte的說明,就可以明白zero byte什麼時候出現...

C 中空類佔一位元組原因詳解

c 中空類佔位問題 在c 中空類會佔乙個位元組,這是為了讓物件的例項能夠相互區別。具體來說,空類同樣可以被例項化,並且每個例項在記憶體中都有獨一無二的位址,因此,編譯器會給空類隱含加上乙個位元組,這樣空類例項化之後就會擁有獨一無二的記憶體位址。如果沒有這乙個位元組的佔位,那麼空類就無所謂例項化了,因...