系统相关
首页 > 系统相关> > 第7章 更灵活的定位内存地址的方法

第7章 更灵活的定位内存地址的方法

作者:互联网

and指令:逻辑与指令,按位进行与运算(对应位全1为1,不然为0)
例如指令
mov al,01100011B
and al, 00111011B
执行后al = 00100011B
通过该指令可将操作对象的相应位设位0,其他位不变

or指令:逻辑或指令,按位进行或运算(对应位有1为1,全0为0)
例如指令
mov al,01100011B
or al, 00111011B
执行后al = 01111011B
通过该指令可将操作对象的相应位设为1,其他位不变。

我们要把人能看懂的信息存储在计算机中,就要对其及进行编码,将其转化为二进制信息进行存储。计算机要将存储的信息显示出来看就需要对其进行解码。
一个文本编辑过程中,就包含着按照ASCII编码规则进行编码和解码:
键入"a"计算机用ASCII码的规则对其进行编码,将转化为61H存储在内存指定的空间中;文本编辑软件从内存中取出61H,将其送到显卡的显存中;工作在文本模式下的显卡,用ASCII码的规则解释显存中的数据,61H当作字符"a",显卡驱动显示器,将字符"a"图像画在屏幕上

汇编程序中'......'的方式指明数据是以字符的形式给出的,编译器将其转换对应ASCII码
db 'unIX'相当于db 75H,6EH,49H,58H

大小写转换问题

首先分析:每个小写字母的ASCII码值比大写字母ASCII码值大20H,通过此方法可以将小写字母转化为大写,可这要先判断字母本身是否是大小写,但目前水平没有达到
再分析:字母ASCII码的二进制,除第五位(从0开始计数)外,大写字母和小写字母其他各位都一样。大写字母第五位为0,小写字母第五位为1
因此可以用and 和 or指令将第五位置0或置1来改变大小写

[bx+idata]

[bx]可以指明一个内存单元,[bx+idata]更灵活的指明内存单元,偏移地址(bx)+idata
段地址在ds中
db 'BaSiC'
我们要把这个字符串全部转为大写,可以把这个字符串看作一个数组,首地址就是B

SI和DI

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

[bx+si]和[bx+di]

都表示一个内存单元,偏移地址是(bx)+(si),段地址在ds中

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

都表示一个内存单元,偏移地址位(bx)+(si)+idata,段地址在ds中
以上就是CPU提供的多种寻址方式
当我们需要汇编中的循环嵌套时,可以将外层循环的cx数值保存起来,在执行外层循环loop指令前,再恢复外层循环cx数值。
一般来说,在需要暂存数据的时候,我们应该用栈
寻址方式的适当使用,是我们可以以更合理的结构来看待所要处理的数据。而为所要处理的看似杂乱的数据设计一种清晰的数据结构是程序设计的一个关键问题

新年快乐!

标签:定位,idata,灵活,bx,al,si,指令,内存地址,ASCII
来源: https://www.cnblogs.com/beckagainfly/p/15859181.html