and al,00111001B 通过该指令可以将操作对象的相应位设为0,其他不变
or al,00111011B 通过该指令可以将操作对象的相应位设为1,其他不变
按a键,这个按键的信息被送往计算机,计算机用ASCII码的规则对其进行编码,将其转化为61H存储在内存的制定空间中,文本编辑软件从内存中取出61H,将其送到显卡的显存上。
data segment
db 'unIX'
db 'foRk'
data ends
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOrMaTiOn'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov bx,0
mov cx,5
s: mov al,[bx]
and al,11011111B ;观察大小写ASCII对应二进制得出,大写字母第五位必为0,小写字母第五位必为1。
mov [bx],ax
inc bx
loop s
mov bx,5
mov cx,11
s0:mov al,[bx]
or al,00100000B ;将第五位转为1,则大写转为小写
mov [bx],ax
inc bx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
s: mov al,[bx]
and al,11011111B
mov [bx],al
mov al,[bx+5]
or al,00100000B
mov [bx+5],al
inc bx
loop s
比如,c语言
char a[5]="BaSiC"
char b[5]="MinIX"
main()
{
int i;
int i=0;
do
{
a[i]=a[i]&0xDF;
b[i]=b[i]|0x20;
i++;
}
while(i<5);
}
功能和bx相似,但是不能拆成两个8位寄存器来用
codesg segment
start: mov ax,codesg
mov ds,ax
mov si,0
mov di,16
mov cx,8
s: mov ax,[si]
mov [di],ax
add si,2
add di,2
loop s
s0:mov ax,0[si] ;简化版本
mov 16[si],ax
add si,2
loop s0
mov 4c00h
int 21h
codesg ends
end start
mov ax,[bx+si] 等同于 (ax)=((ds)*16+(bx)+(si))
mov ax,[bx+si+idata]
mov ax,200[bx+si]