汇编语言个人学习笔记——第七章 更灵活的定位内存地址的方法

引言

       前面,我们用[0]、[bx]的方法,在访问内存的指令中,定位内存单元的地址。这一章,主要学习一些更灵活的ding定位内存地址的方法和相关的编程方法。

 

7.1 and和or指令

(1)and指令:逻辑与指令,按位进行与运算。

如mov al,01100011B

    and al,00100011B

执行后:al=00100011B

and指令的一点功能

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

例如:

将al的第6位设为0:and al,10111111B

将al的第7位设为0:and al,01111111B

将al的第0位设为0:and al,11111110B

(2)or指令:逻辑或指令,按位进行或运算。

如 mov al,01100011B

     or al,00111011B

执行后:al=01111011B

or指令的一点功能

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

例如:

将al的第6位设为1:or al,01000000B

将al的第7位设为1:or al,10000000B

将al的第0位设为1:or al,00000001B

 

7.2关于ASCII码

世界上有很多编码方案,有种方案叫ASCII编码,是在计算机系统中通常被采用的。

简单的说,所谓编码方案,就是一套规则,它约定了用什么样的信息来表示现实对象。

比如说,在ASCII编码方案中,用61H表示“a”,62H表示“b”。

一种规则需要人们遵守才有意义。

一个文本编辑过程中,就包含着按照ASCII编码规则进行的编码和解码。

在文本编辑过程中,我们按一下键盘的a键,就会在屏幕上kan'看到“a”。

过程:

键盘有一个芯片,将a键转化为ASCII码对应的数字61H,将数字送到内存空间,然后文本编辑软件从内存空间中指定读出数据,将它送入显存中。

 

7.3以字符形式给出的数据

我们可以在汇编程序中用‘……’的方式指明数据是以字符的形式给出的,编译器将把它们转化为转化为相对应的ASCII码。

例如:

assume ds:data
data segment
db 'unIX'
db 'foRK'
data ends
code segment
 start:mov al,'a'
       mov bl,'b'
       mov ax,4c00h
       int 21h
code ends
end start

上面的源程序中:

db 'unIX'相当于“db 75H,6EH,49H,58H”,“u”、“n”、“I”、“X”的ASCII码分别为75H、6EH、49H、58H;

db 'foRK'相当于“db 66H,6FH,52H,4BH”,“f”,“o”,“R”,“K”的ASCII码分别为66H、6FH、52H、4BH;

(ASCII码用1个字节就可以表示不需要定义字型数据)

mov al,'a'相当于mov al,61H  a的ASCII码为61H;

mov al,'b'相当于mov al 62H  b的ASCII码为62H。

 

7.4大小写转换的问题

首先分析一下,我们知道同一个字母的大写字符和小写字符对应的ASCII码是不同的,比如“A”的ASCII码是41H,“a”的ASCII码是61H。

要改变一个字母的大小写,实际上就是要改变它所对应的ASCII码。

我们可以将所有的字母的大写字符和小写字符所对应的ASCII码列出来,进行比对,从中找到规律。

大写            二进制              小写                   二进制

  A             01000001             a                    01100001

  B             01000010             b                    01100010

  C             01000011             c                    01100011

  D             01000100             d                    01100100

通过对比可以发现,小写字母的ASCII码值比大写字母的ASCII码值大20H(十进制为32)

这样,我们可以想到,如果将"a"的ASCII码值减去20H,就可以得到“A”;如果将“A”的ASCII码值加上20H就可以得到“a”。

按照这样的方法,我们可以将段中大写字母变成小写,小写字母变成大写。

如果我们只要将大写变为小写,还要考虑让程序能够判断一个字母是大写还是小写

判断将用到一些我们目前还没有学习到的指令。现在面临的问题是,用已学的指令来解决将大写字母改为小写字母或是将小写字母改为大写字母这个问题,则我们不能对字母的大小写进行任何判断。

其实我们可以看出,就ASCII码的二进制形式来看,除了第5位(位数从0开始计算)外,大写字母和小写字母的其他各位都一样。

大写字母ASCII码的第5位(位数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值