版權(quán)聲明:本文為 gfson 原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處。
注:作者水平有限,文中如有不恰當(dāng)之處,請(qǐng)予以指正,萬分感謝。
7.1 and 和 or 指令

7.2 大小寫轉(zhuǎn)換問題
- 字母的大寫字符和小寫字符對(duì)應(yīng)的 ASCII 碼表如下:

-
通過對(duì)比,我們發(fā)現(xiàn):
- 小寫字母的 ASCII 值比大寫字母的 ASCII 值大 20H。
- 大 20H 以二進(jìn)制的方式體現(xiàn)在第 5 位為 1。
-
所以,可以使用 and 和 or 得到如下結(jié)論:
- 大寫字母 or 00100000B,將大寫字母的第 5 位置為 1,變?yōu)樾懽帜?/strong>。
- 小寫字母 and 11011111B,將小寫字母的第 5 位置為 0,變?yōu)榇髮懽帜?/strong>。
7.3 SI 和 DI
- si 和 di 不能分成兩個(gè)八位寄存器使用。
- 其功能與 bx 相近。

7.4 不同尋址方式的靈活應(yīng)用
- [idata] 用一個(gè)常量來表示地址,可用于直接定位一個(gè)內(nèi)存單元。
- [bx] 用一個(gè)變量來表示內(nèi)存地址,可間接定位一個(gè)內(nèi)存單元。
- [bx+idata] 用一個(gè)變量和常量表示地址,可在一個(gè)起始地址的基礎(chǔ)上用變量間接定位一個(gè)內(nèi)存單元。
- [bx+si] 用兩個(gè)變量表示地址。
- [bx+si+idata] 用兩個(gè)變量和一個(gè)常量表示地址。
- 一般來說,在需要暫存數(shù)據(jù)時(shí),我們應(yīng)該使用棧。
7.5 實(shí)驗(yàn) 6

- 答案:
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start:
mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s0:
push cx
mov si,0
mov cx,4
s:
mov al,[bx+si+3]
and al,11011111b
mov [bx+si+3],al
inc si
loop s
add bx,16
pop cx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start