彙編關於查表機制

2021-08-20 06:49:30 字數 3154 閱讀 8989

其實在很多時候,我們在設計演算法的時候,有的時候就會考慮利用簡捷的演算法,用一種對映的關係去解決我們需要解決的部分問題,利用表機制可以在兩個資料集合之間建立一種對映關係,使得我們可以用查表的方法去根據給出的資料得到其在另乙個集合當中對應的資料,這樣做的目的一般來說有以下3個

下面就演示下乙個通過表的對映來進行,下面就演示下通過0-15十進位制數和0-f十六進製制數進行對映

如果我們不使用查表的方式,而是使用的是分類的情況的話,其實程式還會複雜,就比如說數值0~9和字元」0」~」9」之間的對映關係其實就是數值+30h=對應的ascii碼的值,但是10~15和」a」~」f」之間的對映關係就是數值+37h=對應字元的ascii值,這樣分情況彙編寫出來就複雜了所以這裡我們採用查表的方法,首先我們要知道1個位元組需要用兩個十六進製制數碼來表示,所以我們就需要將1個位元組的高四位和低四位給分開來,這裡我們採用的是按位與的方法程式如下所示

assume cs:code,ss:stack,ds:data

stack segment

db 128 dup(0) ;定義棧資料,在call指令的時候會把ip暫存器的值壓棧

stack ends

data segment

table db '0123456789abcdef' ;表對映的值

data ends

code segment

start:mov ax,data

mov ds,ax ;設定ds段

mov ax,stack

mov ss,ax ;設定ss段

mov ax,128

mov sp,ax

mov al,10 ;al為傳入的值

call

show ;呼叫show

mov ax,4c00h

int21h show: push bx

push es

mov ah,al

shr ah,1

shr ah,1

shr ah,1

shr ah,1 ;利用ah取得的是高四位

and al,00001111b ;al取得的是低四位

mov bl,ah

mov bh,0

mov ah,table[bx] ;將table中的字元給ah

mov bx,0b800h

mov es,bx

mov es:[160*12+40*2],ah ;將ah的值給我們要顯示的緩衝區的位址

mov bl,al

mov bh,0

mov al,table[bx];取al的值

mov si,160*12+40*2+2

mov es:[si],al ;放入資料

pop es

pop bx

retcode ends

endstart

執行結果如下所示

還有一題就是根據我們傳入的值去顯示出對應的sin角度的值,我們要判斷我們給的資料是否是30,60,90,120,150,180裡面的,如果不是說明表裡面沒有對應的,那麼就要直接程式結束

assume cs:code,ss:stack,ds:data

stack segment

db 128 dup(0)

stack ends

data segment

ag0 db '0',0

ag30 db '0.5',0

ag60 db '0.866',0

ag90 db '1',0

ag120 db '0.866',0

ag150 db '0.5',0

ag180 db '0',0

table dw ag0,ag30,ag60,ag90,ag120,ag150,ag180 ;字串偏移位址表

data ends

code segment

start:mov ax,data

mov ds,ax

mov ax,stack

mov ss,ax

mov ax,128

mov sp,ax

mov ax,50

call show

mov ax,4c00h

int 21h

show: push bx

push es

push si

mov bx,0b800h

mov es,bx

;下面用角度值/30作為相對於table的偏移,取得對應的字串偏移位址,放在bx中

mov ah,0

mov bl,30

div bl

cmp al, 6 ;除的結果大於6就直接返回

ja showret

cmp al, 1 ;除的結果如果小於1也直接返回

jb showret

cmp ah, 0 ;餘數不為0也直接返回

jne showret

mov bl,al

mov bh,0

add bx,bx

mov bx,table[bx]

;下面顯示sin(x)對應的字串

對於可以根據資料,直接計算出所要找的元素的位置的表的,我們稱為直接定址表

mo彙編指令 彙編指令速查表

一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把 ax,cx,dx,bx,sp,bp,si,di 依...

51微控制器彙編指令速查表

51微控制器彙編指令速查表 指令格式 功能簡述 位元組數 週期 一 資料傳送類指令 mov a,rn 暫存器送累加器 1 1 mov rn,a 累加器送暫存器 1 1 mov a ri 內部ram單元送累加器 1 1 mov ri a 累加器送內部ram單元 1 1 mov a data 立即數送累...

關於內嵌彙編

最近才發現原來noi不給用內嵌彙編 那麼這篇文章除了平常做做oj以外就沒什麼意義了 參考自 嗯 搞oi久了應該都會碰到這麼一種問題 爆棧 當然,手寫棧是最普遍的一種解決方法 比如noi2011 day2 t1,ms是臨時換的一道水題,只要會手寫棧就可以水過 pascal黨是很舒服的,因為可以在 中手...