and 
mov al,01100011B
and  al,00111011B
执行后结果:al=00100011B
or
mov al,01100011B
or     al,00111011B
执行后结果:al=01111011B

在没有学习新命令之前,若要将一个大写字母转为小写字母,或者小写字母转为大写字母,可以用and和or来实现

2.在汇编中,用’….’的方式指名数据是以字符的形式给出的,编译器将把它们转化为相对应的ascii码

如:
db 'unIX'  相当于 db 75H,6EH,49H,58H,  'u','n','I','X'对应的ascii码是75H,6EH,49H,58H
mov al,'a' 相当于 mov al,61H,因为'a'的ascii码为61H

3.可以用[bx+idata]来表示一个内存单元

如
datasg segment
db 'BaSiC'
db 'MinIX'
datasg ends

datasg段中有两个字符串,第一个起始地址为0,第二个起始地址为5,可以将这两个字符串看做两个数组

0[bx] 5[x] 等价于 C语言当中的 a[i] b[i]

4.si和di是8086CPU中和bx功能相近的寄存器,si和di不能分为两个8位寄存器来使用

如:
assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
db '...............'
datasg ends
用si和di实现将字符串'welcome to masm!'复制到它后面的数据区
codesg segment
start:mov ax,datasg
 mov ds,ax
 mov si,0
 mov cx,8
 s:mov ax,0[si]
    mov 16[si],ax
    add si,2
    loop s
    mov ax,4c00h
    int 21h
codesg ends
end start

5.[bx+si]和[bx+di] 含义相似 [bx+si+idata]和[bx+di+idata]含义也相似

如:mov ax,[bx+si]

将一个内存单元的内容送入ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为bx的数值加上si的数值,段地址默认在ds中

另外的[bx+si+idata]同理

mov ax,[bx+200+si]

可以写成

mov ax,[200+bx+si]
mov ax,200[bx][si]
mov ax,[bx].200[si]
mov ax,[bx][si].200

6.几种定位内存地址的方法,又称寻址方式

(1)[idata]用一个常量来表示地址,可直接定位一个内存单元
(2)[bx]用一个寄存器中的内容来表示内存地址,可间接定位一个内存单元
(3)[bx+idata]用一个寄存器中的内容和一个常量的和来表示地址,可间接定位一个内存单元
(4)[bx+si]用一个两个寄存器中的数据的和表示地址
(5)[bx+si+idata]用两个寄存器中的数据和一个常量的和表示地址

7.编程 将datasg段中每个单词的前4个字母改为大写字母

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,datasg
mov ds,ax
mov ax,stacksg
mov ss,ax
mov sp,16
mov cx,4
s1: push cx
mov si,3
mov cx,4
s2:mov al,[bx+si]
     and al,11011111B
     mov [bx+si],al
     inc si
     loop s2
add bx,16
pop cx
loop s1
mov ax,4c00h
int 21h
codesg ends
end start