本節(jié)學(xué)什么:前面,我們用[0]间雀、[bx]的方法,在訪問內(nèi)存的指令中镊屎,定位內(nèi)存單元的地址惹挟。
在這一章中,我們主要講解一些更靈活的定位內(nèi)存地址的方法和相關(guān)的編程方法缝驳。
1.and和or
例子:mov al, 01100011B (63H)
and al, 00111011B (3b)
執(zhí)行后
al = 00100011B (23)
or同理
用途:通過and指令可將操作對象的相應(yīng)位設(shè)為0连锯,其他位不變归苍,如:
將al的第6位設(shè)為0:and al, 10111111B
將al的第7位設(shè)為0:and al, 01111111B
將al的第0位設(shè)為0:and al, 11111110B
通過or指令可將操作對象的相應(yīng)位設(shè)為1,其他位不變运怖,如:
將al的第6位設(shè)為1:or al, 01000000B
將al的第7位設(shè)為1:or al, 10000000B
將al的第0位設(shè)為1:or al, 00000001B
2.關(guān)于ASCII碼
所謂編碼方案霜医,就是一套規(guī)則,它約定了用什么樣的信息來表示現(xiàn)實(shí)對象,比如說驳规,在ASCII編碼方案中肴敛,用 61H 表示“a”,62H表示“b”吗购。
分析一段代碼:
assumeds:data?
data segment?
db 'unIX'db'foRK'
data ends
code segment
start:mov ?al,'a'
mov bl,'b'
mov ax,4c00h
int 21h
code ends
end start
“db ‘unIX’ ” 相當(dāng)于“db 75H,6EH,49H,58H”医男, “u”、 “n”捻勉、 “I”镀梭、 “X”的ASCII碼分別為75H、6EH踱启、49H报账、58H;
“db ‘foRK’ ” 相當(dāng)于“db 66H,6FH,52H,4BH”埠偿, “u”透罢、 “n”、 “I”冠蒋、 “X”的ASCII碼分別為66H羽圃、6FH、52H抖剿、4BH朽寞;
注意:小寫字母的ASCII碼值比大寫字母的ASCII碼值大20H?
例子大寫字母轉(zhuǎn)小寫字母:
assumecs:codesg,ds:datasg
datasg segment
db'BaSiC'db'iNfOrMaTiOn'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax;設(shè)置ds指向datasg段
mov bx,0;設(shè)置(bx)=0,ds:bx指向“BaSiC”的第一個(gè)字母
mov cx,5;設(shè)置循環(huán)次數(shù)5斩郎,因?yàn)椤癇aSiC”的有5個(gè)字母
s:mov al,[bx];將ASCII碼從ds:bx所指向的單元中取出
and al,11011111b;將al中的ASCII碼的第5位置為0脑融,變?yōu)榇髮懽帜?/i>
mov [bx],al;將轉(zhuǎn)變后的ASCII碼寫回原單元
inc bx;(bx)加1,ds:bx指向下一個(gè)字母
loops