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