我有存儲在寄存器中的十六進制值,例如此一:從十六進制表達式中獲取單個字符?
mov ax,1234h
我需要每個字符(1,2,3,4)與十進制值比較,理想的我將通過字符環/號碼,但我不知道如何指向每一個,或者甚至可能。如何才能做到這一點?
我有存儲在寄存器中的十六進制值,例如此一:從十六進制表達式中獲取單個字符?
mov ax,1234h
我需要每個字符(1,2,3,4)與十進制值比較,理想的我將通過字符環/號碼,但我不知道如何指向每一個,或者甚至可能。如何才能做到這一點?
給出一個數字,如1234H 16分它,得到的餘數,這是你第一次右擊,數量最多的
如果分割的結果不爲零後,重複使用部門作爲的結果,你的數。
這是衆所周知的鹼基轉換算法。你可以在維基百科上查找它。 http://en.wikipedia.org/wiki/Hexadecimal
這是彙編語言,因此沒有一條指令可以完成此操作。有幾個步驟。可能最具時效性的方式將被描述如下。如果需要,第一步是保存值,因爲其餘代碼將會破壞它。這些步驟是有點不精確,但給的一般算法:
讓我們假設你要檢查的數值(1234H)是寄存器AX,並且您的測試值在DX中。然後一個可能的程序可能看起來像:
push ax ; save the original value
mov cx,4 ; set main loop count (how many nibbles we want to check)
mainloop:
rol ax,4 ; rotate left 4 bits [puts the top 4 bits into the low 4 bits]
mov bx,ax ; save the rotated value
and ax,000Fh ; mask off bottom 4 bits
cmp ax,dx ; check against our test value
je found ; jump if we found it
mov ax,bx ; retrieve the last rotated value for the next nibble check
loop mainloop ; decrement CX and loop if not zero
... do some things here for "not found" case
jmp done
found:
... do some things here for "found" case
done:
就是這樣的。您需要指定許多條件,例如是否保留原始值,如果找到匹配而不是找到匹配項,會發生什麼情況,以及您是要匹配所有匹配項還是隻匹配一個匹配項。以上只是告訴你至少有一場比賽。它還顯示瞭如何使用位操作來隔離4位的值。