and和or指令

通过and指令可将操作对象的相应位设为0,其他位不变。or指令可将操作对象的相应位设为1,其他位不变。

关于ASCⅡ码

我们可以在汇编程序中,用‘…….’的方式指明数据是以字符的形式给出的,编译器将把它们转化为相应的ASCⅡ码。要改变一个字母的大小写,实际上就是要改变它所对应的ASCⅡ码。

大小写转换问题

可以看出,就ASCⅡ码的二进制形式来看,除第5位(位数从0开始计算)外,大写字母和小写字母的其他各位都一样。大写字母ASCⅡ码的第5位为0,小写字母的第5位是1。
~U4ZZ`X~}RJL2~V2ZOM_AB4.png
因此,一个字母不管它原来是大写还是小写,将它的第5位置0,他就必将变成大写字母;将它的第5位置1,它就必将变成小写字母。or和and指令可以很好的实现该操作。

[bx+idata]

在前面,我们可以用[bx]的方式来指明一个内存单元,我们还可以用一种更为灵活的方式来指明内存单元:
[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata(bx中的数值加上idata)。
我们来看一下指令mov ax,[bx+200]的含义:
将一个内存单元的内容送入ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为bx中的数值加上200,段地址在ds中。数字化的描述为:(ax)=((ds)*16+(bx)+200)

SI和DI

SI和DI是8086CPU中和bx功能相近的寄存器,但是SI和DI不能够分成两个8位寄存器来使用。以下的三组指令实现了相同的功能:
(1)mov bx,0 (2) mov si,0 (3) mov di,0
mov ax,[bx] mov ax,[si] mov ax,[di]
下面的三组指令也实现了相同的功能:
(1)mov bx,0 (2) mov si,0 (3) mov di,0
mov ax,[bx+123] mov ax,[si+123] mov ax,[di+123]
我们用ds:si指向要复制的原始字符串,用ds:di指向复制的目的空间,然后用一个循环来完成复制。

[bx+si]和[bx+di]

在前面,我们用[bx(si或di)]或[bx(si或di)+idata]的方式来指明一个内存单元,我们还可以使用更加灵活的方式:
[bx+si]
[bx+di]
[bx+si]表示一个内存单元,它的偏移地址为(bx)+(si)(即bx中的数值加上si中的数值)。

[bx+si+idata]和[bx+di+idata]

[bx+si+idata]和[bx+di+idata]的含义相似,[bx+si+idata]表示一个内存单元,它的偏移地址为(bx)+(si)+idata(即bx中的数值加上si中的数值再加上idata)。
指令mov ax,[bx+si+idata]的含义:
将一个内存单元的内容送入ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为bx中的数值加上si中的数值再加上idata,段地址在ds中。数字化的描述为:(ax)=((ds)*16+(bx)+(si)+idata)