文章目录
7.1 and和or指令
- and指令:逻辑与指令,按位进行运算。
通过该指令可以将操作对象的相应位设为0,其它位不变。
- or指令:逻辑或指令,按位进行或运算。
通过该指令可将操作对象的相应位设为1,其他位不变。
7.2关于ASCII码
世界上有很多编码方案,有种方案叫做ASCII编码,是在计算机系统中通常被采用的。
简单的说,所谓编码方案,就是一套规则,它约定了用什么样的信息来表示现实对象。
7.3以字符形式给出的数据
我们可以在汇编程序中,用’…'的方式指明数据是以字符的形式给出的,编译器将把它们转化为相对应的ASCII码。
7.4大小写转化的问题
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOrMaTiOn'
datasg ends
codesg segment
start:mov ax,datasg
mov ds,ax ;ds指向datasg段
mov bx,0 ;设置(bx)=0,ds:bx指向'BaSiC'的第一个字母
mov cx,5 ;设置循环次数为5,因为'BaSiC'有5个字母
s:mov al,[bx] ;将ASCII码从ds:bx所指向的单元中取出
and al,11011111B ;将al中的ASCII码的第5位置为0,变为大写字母
mov [bx],al ;将转变后的ASCII码写回原单元
inc bx ;(bx)加1,ds:bx指向下一个字母
loop s
mov bx,5 ;设置(bx)=5,[5]是第二串字符的第一个字母,应为第一串字符是[0]-[4]
mov cx,11
s0:mov al,[bx]
or al,00100000B ;将al中的ASCII码的第5位置为1,变为小写字母
mov [bx],al
inc bx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
7.5[bx+idata]
[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata
mov ax,[bx+200]
表示将一个内存单元的内容送入ax,这个内存单元的长度为2字节(一个字单元),存放一个字。
偏移地址为bx中的数据加上200,段地址在ds中
数学化的描述为:(ax)=((ds)*16+(bx)+200)
指令mov ax,[bx+200]也可以写出如下格式:
- mov ax,[200+bx]
- mov ax,200[bx]
- mov ax,[bx].200
问题7.1
分析:
7.6 用[bx+idata]的方式进行数组的处理
我们观察datasg段中的两个字符串,一个的起始地址为0,另一个的起始地址为5。
我们可以将这两个字符串看作两个数组,一个从0地址开始存放,另一个从5开始存放。
我们可以用[0+bx]和[5+bx]的方式在同一个循环中定位这两个字符串中的字符。
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOr'
datasg ends
codesg segment
start:mov ax,datasg
mov ds,ax
mov bx,0
mov cx,5
s:mov al,[bx] ;相当于[0+bx]
and al,11011111b
mov [bx],al
mov al,[5+bx]
or al,00100000b
mov [5+bx],al
inc bx
loop s
mov ax,4c00h
int 21h
codesg ends
end start