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

7.1 and 和 or 命令

介绍两条指令and和or
and指令:逻辑与指令,按位进行与运算。 通过该指令可将操作对象的相应位设为0,其他位不变
or指令:逻辑或指令,按位进行或运算。 通过该指令可将操作对象的相应位设为1,其他位不变



7.2 关于ASCII 码

    计算机中,所有信息都是二进制,而人能理解的信息是已经具有约定意义的字符。把人能理解的字符存储到计算机中,就需要对其进行编码,将其转化为二进制信息进行存储。而计算机要将这些存储的信息再显示给我们看,就要再对其进行解码。只要编码和解码采用同样的规则,我们就可以将人能理解的信息存入到计算机,再从计算机中取出。




7.3 以字符形式给出的数据

    在汇编程序中,用 '......' 的方式指明数据是以字符的形式给出的,编译器将把它们转化为相对于的ASCII码。‘…’ 中几个字符就分配几个字节的空间。比如’unix’系统就分配4个字节。




7.4 大小写转换的问题

    大小写字母的ASCII码相差20H,如果你更仔细的观察就会发现 同一个字母大小写的二进制表示除了第5位(位数从0开始计算)不同外,其他都相同。第5位的位权2^5等于32,32的16进制表示就是20H 。


这小节让我最有感触的是后面一段话 “如果一个问题的解决方案,使我们陷入一种矛盾之中。那么,很可能是我们考虑问题的出发点有了问题,或是说,我们起初运用的规律并不合适。” 我初中,高中做数理化最后几道难题时,总是走入死胡同,就是不知道跳出问题,到起点去重现开始,我都是跳到中间去想有没有其他办法。很多时候当你开头选中了一个思路或者一个定理去解决问题,其实根据那个定理走下去的只有一条路,很少有第二条路,那条路解决不了问题,就应该换思路或者换定理了。


7.5 [bx+idata]

mov ax,[bx+200]指令也可以写成如下常用格式:
mov ax,[200+bx]
mov ax,200[bx] 这种形式很像高级语言中的数组结构。200相当于数组在内存中的基地址,[bx]表示数组的索引
mov ax,[bx].200 这种结构用于结构体

    [bx+idata]的方式为高级语言实现数组提供了便利机制。




7.6 用[bx+idata]的方式进行数组的处理



7.7 SI 和 DI

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




7.8 [bx+si]和[bx+di]

mov ax,[bx+si]指令也可以写成如下格式(常用):
mov ax,[bx][si] 用于二维数组



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

mov ax,[bx+si+idata]指令可以写成如下格式(常用):
mov ax,[bx+200+si]
mov ax,[200+bx+si]
mov ax,200[bx][si]
mov ax,[bx].200[si]
mov ax,[bx][si].200



7.10 不同的寻址方式的灵活应用

    因为Loop指令的循环次数是只能保存在CX中,当出现循环嵌套时,要注意外层循环次数CX的保存和恢复,否则内层循环执行完,CX变成0,内层循环退出了,外层循环执行到loop指令时,cx=cx-1=0-1=“FF…FF”,破坏了外层循环的次数。
    书中介绍CX怎么保存时,个人感觉是阐述了计算机的发展过程。刚开始保存在寄存器中(书中举例是保存在DX);接着由于寄存器个数有限,编写复杂程序时,寄存器都被利用了,没有多余寄存器用来保存循环次数,就保存到空间更大的内存中;由于对普通内存单元的操作不是很方便,你必须要记得内存单元的地址,才能通过mov指令获得你保存的数据,如果保存多个数据,就更加混乱了,而栈作为特殊的内存单元,又有push、pop这样的指令很方便的存取数据,很适合保存数据。一般来说,在需要暂存数据的时候,我们都应该使用栈。我们没有经历过计算机的早期阶段,提到暂存数据时,我们只会想到栈。


    这小节中除了思考循环嵌套外,我最有共鸣的还是小节末尾的一段话 “之所以如此重视寻址方式,是因为寻址方式的适当应用,使我们可以以更合理的结构来看待所要处理的数据。而为所要处理的看似杂乱的数据设计一种清晰的数据结构是程序设计的一个关键问题”,我上学时的专业是计算机网络,所以没有系统的学习汇编,C语言,Java是在培训班只学到了JavaSE,编程水平停留在增删改查。后来在不断接触零零散散的编程知识中,编程给我一种感觉,就是在操作内存中的数据,谁将内存中的数据结构设计的更加巧妙,编写程序的过程就更加高效,程序执行时也更加高效。高级语言中,定义变量的类型,不管是基础类型,还是结构类型,其实就是规定这个数据在内存中占用的字节数,给数据设计合理的结构,让编写程序和执行程序都更加高效,当然高级语言这种定义也让编写程序更加方便,才写了几天简单的汇编程序,就已经觉得很累,之所以面向对象的编程语言受欢迎就是更加符合人类的思考方式。
    不敢说完全,但书中的这段话验证了我这种编程菜鸟的猜想,让我自学多了些信心。


实验6 实践课程中的程序


    习惯把能测试的例题,问题都自己编写、测试一遍,所以实验已完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值