汇编语言—更灵活的定位内存地址的方法
一、and和or指令
(1)and指令:逻辑与指令,按位进行与运算。该指令可将操作对象的相应位设为0,其他位不变。
例如:
mov al,01100011B
and al,00111011B
执行后:al=00100011B
(2)or指令:逻辑或指令,按位进行或运算。该指令可将操作对象的相应位设为1,其他位不变。
例如:
mov al,01100011B
or al,00111011B
执行后:al=01111011B
案例:大小写转换问题(不用判断指令)
分析:从ASCLL码的二进制形式来看,除第五位(位数从0开始计算)外,大写字母和小写字母的其他各位都一样。大写字母ASCLL码的第五位为0,小写字母的ASCLL的第五位为1。这样,我们就可以,对一个字母无论是大写还是小写,将它的第五位,置为0,它就必将变为大写字母,第五位,置为1,它就必将变为小写字母。完整代码如下:
二、ASCLL码
一个文本编辑过程中,就包含着按照ASCLL编码规则进行的编码和解码。在文本编辑过程中,我们按一下键盘中的a键,就会在屏幕中看到‘a’。为什么会这样呢?我们按下键盘的a键,这个键的信息被送入计算机,计算机用ASCLL码的规则对其进行编码,将其转化为61H存储在内存的指定空间中;文本编辑软件从内存中取出61H,将其送到显卡的显存中;工作在文本模式下的显卡,用ASCLL码的规则解释显存中的内容,61H被当作字符"a",显卡驱动显示器,将字符“a”的图像画在屏幕上。
三、以字符形式给出的数据
我们可以在汇编程序中,用’…'的方式指明数据是以字符的形式给出的,编译器将把它们转化为相对应的ASCLL码。
上面的源程序中
‘u’、‘n’、‘I’、'X’的ASCLL码分别为75H、6EH、49H、58H,所以“db ‘unIX’”相当于“db 75h,6eh,49h,58h”。
同理“db ‘foRK’”相当于“db 66h,6fh,52h,4bh”。
将程序编译连接后,用debug查看data段的内容,如图用r命令分析data段的地址,“ds=0b2d”,所以程序从0b3dh段开始,这里说的程序开始的地方是start所指地方,程序从这里开始,程序第一段仍为数据段,所以段地址为0B3dh。
用d命令查看data段,debug以十六制数码和ASCLL码的形式显示出内容,从中可以看出data段中的每个数据所对应的ASCLL字符。
四、[bx+idata]
可以灵活的用[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata(bx中的数值加上idata)
本文地址:https://blog.csdn.net/qq_46180905/article/details/108991502
上一篇: 将MySQL去重操作优化到极致的操作方法
下一篇: 非常实用的Tomcat启动脚本实现方法