組合語言 直接定址表

2022-05-07 12:15:09 字數 1987 閱讀 6309

assume cs:code

code segment

;從code:[0]~code:[15],也就是,a[0]~a[15];a[si]代表了從code:00開始的偏移量為si的記憶體單元。

;此記憶體單元是字單元,故si的偏移量是2個位元組。

;剩下的空間都是真正的cpu執行的**了。

start:mov si,0

mov cx,8

add word ptr b[0],ax ;add word ptr b[0], ax,**含義:將ax值與b標號的低16位做加法,結果儲存在b標號的低16位中;

;此時b代表的是雙字單元,如果add b, ax;編譯器肯定報錯,因為它們的型別不匹配。

;此處必須指定b[0]是按照字單元作為儲存結構的。

;目的:防止低16位值產生進製。同理:此處必須指定b[2]是按照字單元作為儲存結構的。這個例項就是高位不溢位加法的套路。

;對於無符號數加法它的最大允許範圍是(0000 0000h~ffff ffffh):0~4294967295

add si,2 ;add si, 2;**含義:si的偏移量,由於a的偏移量是按照字單元偏移,故si為2個位元組的偏移

loop s

mov ax,4c00h

int 21h

code ends

end start

assume cs:code, ds:data

data segment ;即使在assume這個偽指令中將ds和data聯絡在一起(c語言的全域性宣告意思)。

;如果沒有將data的段位址賦值給ds,那麼[si]定址的記憶體單元是錯誤的,並不是ds:[si]或a[si]。

a db 1,2,3,4,5,6,7,8

b dw 0

data ends

code segment

start: mov ax,data ;如果在assume中沒有ds:data,那麼在code段中使用a和b是不可能的。因為a和b在code段是不可以見的。

mov ds,ax

mov si,0

mov cx, 8

s: mov al, a[si] ;a[si]代表的是乙個位元組(它已經代表位址和單元長度了),賦值給ax是錯誤的,應該賦值給al,別犯這樣的低階錯誤。

;(ah)=0,是防止高位不為零,al+ah組合成資料就是(ax)。

mov ah, 0

add b, ax

inc si

loop s

mov ax,4c00h

int 21h

code ends

end start

1. 自定義(對映)表

自定義(對映)表是一種巧妙的程式設計方法。在程式設計時,我們可以利用各種自定義(對映)表,在兩個資料集合之間建立一種對映關係,使得我們可以利用查表的方法,根據給出的資料(輸入)得到其在另乙個集合中的對應資料(輸出)。這種設計一般來說有以下3中目的:

2. 資料表

table db '0123456789abcdef'
在這張字元表(字串)中,它的下標(index)和對應的字元(value),兩者之間有乙個簡單的線性對映關係。我們通過下標運算(查表),就可以快速地從給定的數獲取對應的字元。

3. 位址表

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

ag0 db '0',0 ;利用mov bx,table[bx]做為table的偏移,取得對應的字串的偏移位址,放入bx中

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

組合語言 直接定址表

assume cs code code segment a dw 1,2 3,4 5,6 7,8 a代表了code段的首位址code 00,由於dw,也代表了a開始的這一小段記憶體都是按照字單元儲存的。從code 0 code 15 也就是,a 0 a 15 a si 代表了從code 00開始的偏...

組合語言 直接定址表

功能 將a位址中的1 8的數值相加,並儲存到b位址中。assume cs code code segment a db 1,2,3,4,5,6,7,8 b dw 0 start mov si,offset a mov di,offset b mov ah,0 mov cx,8 s mov al,cs...

組合語言學習筆記(十六)直接定址表

code segment a db 1,2,3,4 b dw 0 標號a,描述了位址code 0,和從這個位址開始,以後的記憶體單元都是位元組單元 標號b,描述了位址code 8,和從這個位址開始,以後的記憶體單元都是字單元 mov ax,b相當於mov ax,cs 8 如果想在 段中,直接用資料標...