【第七章】更灵活的定位内存地址的方法

7.1 and和or指令

  1. and指令:逻辑与指令,按位进行与运算

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

    如:将al的第6位设为0的指令是 and al,10111111B

  2. or指令:逻辑或指令,按位或运算

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

    如:将al的第六位设置为1的指令是 or al,01000000B

7.2 ASCII编码

计算机中,所有的信息都有二进制数字存储。当我们对计算机输入'a'时,我们要把'a'进行相应的编码,将其转换成二进制进行存储。

而计算机要将这些存储的信息再显示给我们看,就要再对其进行解码。只要编码和解码采取同样的规则,我们就能将人能理解的信息存入到计算机中,再从计算机中取出

7.4 大小写转换问题

我们考虑一个问题,如何将存储在内存中的字符串"BasIC“的字符全部改成小写?

我们知道,在ASCII码中,将一个字符变为小写,只需要加上20H即可。但是,这个字符串中有大写有小写。理想的情况是,我们判断每一串字符存储的是大写还是小写,只对于那些大写字符进行加20H的操作,但是由于没有学习流程控制语句,我们采用另一种解法

1.PNG

我们注意到,小写和大写的字符的区别在于,小写字符的二进制表示中第六位为1,而大写字母为0。因此,我们只需要将字符的第六位改为1即可

assume cs:code,ds:data
data segment
	db 'BasIC'
data ends
code segment
start:			mov ax,data
			mov ds,ax

			mov bx,0
			mov cx,5
s:
			mov al,ds:[bx]
			or al,00100000B
			mov ds:[bx],al
			inc bx
			loop s

			mov ax,4c00h
			int 21h
code ends
end start

7.5 [bx+idata]

我们可以用一种更灵活的方式表示偏移地址,[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata

该指令也可以写成下面这几种形式: