应该注意的一点,是电脑的基本单位在于八个开关,不用足就是浪费。如果8个不够,再增加便有16个。所以,因事制宜,在设计的时候,唯有用8的倍数才划算。 但是,宇宙中的事物,不见得刚好是八的倍数。如果设计的人没有这种认识,不能把所处理的资料,以8为限制条件去划分,就无法利用这种有利的条件,当然,也就得不到最理想的结果。 所以,要想程式具有最高的效率,首先要把资料整理成为八的倍数值结构。把资料整理为最有效的结构方式,称为「资料结构」,关于这一点,在后面将有较详细的例证。 每个字元有 256种排列组合,即相当于 256个十进位的数字。为了方便人的理解,通常将字元写成十六进位形式,并在其数字后加一‘H’,以别于十进位数字。 兹将十进制与十六进制对应表列于下面: 二进位值 八进位值 十进位值 十六进位值 0 0 0 0H 1 1 1 1H *10 2 2 2H 11 3 3 3H *100 4 4 4H 101 5 5 5H 110 6 6 6H 111 7 7 7H *1000 *10 8 8H 1001 11 9 9H 1010 12 *10 0AH 1011 13 11 0BH 1100 14 12 0CH 1101 15 13 0DH 1110 16 14 0EH 1111 17 15 0FH *10000 *20 16 *10H ★ 凡前有 *者表示进位。 ★★二进位数后应加‘B’,八进位后应加‘O’。 由上可知,十六进制仍沿用十进位数字,只是到了10时,已无现成数字可用,只好借用英文字母。在程式中,汇编程式为了分辨ASCII 字符与十六进制数值,通常规定凡十六进位数值以英文字母开始者,在其字母前加一‘0’。
三、对暂存器的认识
暂存器 (Register) 相当于调色皿,资料相当于色料。把色料放进调色皿里,为的是要得到预定的效果,暂存器对于资料亦然。 调色皿有大有小,深度有深有浅,其目的是针对不同的情况,以作有效的处理。暂存器也是一样,应用得好,程式会很精简,容易修改、阅读。否则,想到哪一个就用哪一个,没有原则,没有章法,这种程式委实不敢恭维。 暂存器的重要性,在于处理方便灵活、速度快,占用空间小。不幸8088 CPU的暂存器很少,用起来总是捉襟见肘,辛苦异常。正因为此,暂存器的善用与否,成为程式效能高低的关键技术。 有些程式师不愿意精打细算,经常设定一些「缓冲器」,利用缓冲器可以任意定名、便于记忆的优点,竟把珍贵的暂存器,当作各缓冲器间、搬运资料的交通工具,只见资料不停的搬进搬出。虽然程式师省了点事,但运行速度白白浪费了,空间也被糟蹋了。写这样的组合程式,远不如去用高阶语言。 当然,缓冲器是有必要的,但也只限于「必要」的情况,而且,在程式规划时,就要考虑各种应用的条件,把缓冲器内的值取出后,一次处理完毕。如果不能一次解决或是经常要用到的资料,则设法放在暂存器中。 实际上,任何程式不可能在一个过程中,同时需要很多特殊的资料。好的程式师能把复杂的工作处理得有条不紊,功力不够的,往往把简单的事情弄得令人难以理解。8088的暂存器的确是不够用,但是却不至于少到要以缓冲器取代的地步。 工作的好坏、成败,与人的组织能力有绝对的关系,限于篇幅,我们不能多谈。可是,利用暂存器的特性,来处理繁杂的资料,倒也是训练组织力的方法之一。 首先,我们应该把暂存器视为工具,瞭解工具的功能、性质,然后要能铭记于心,纯熟地加以运用。 根据个人的理解,暂存器概分六类: 1,分段用 程式段 CODE SEGMENT :CS 资料段 DATA SEGMENT :DS 堆栈段 STACK SEGMENT :SS 特设段 EXTRA SEGMENT :ES 2,堆栈用: 堆栈值 STACK POINTER :SP 栈用器 BASE POINTER :BP 3,记忆转换用: 源存器 SOURCE INDEX :SI 终存器 DESTINATION INDEX :DI 4,一般用: 累积器 ACCUMULATOR :AX 兼用器 BASE :BX 计数器 COUNTER :CX 资料器 DATA :DX 5,标志用:旗号值 STATUS :FLAG 6,指示用:执行值 INSTRUCTION POINTER :IP 为了便于记忆,我们给暂存器定中文名,其定义为: 凡分段用者率称「段」,做为各段起始位置指示用,其计值方式为:系统中的绝对地址=(本值×16)+各段定址值 如:资料段为 1600H,乘16即为16000H。 如源存器为 1234H,则此源存器在系统中由0算起的地址为:17234H。 应注意者,各种以「器」定名的暂存器,皆有限用的段,切勿混用。 凡定名为「值」者,皆为不能用来供程式写作的暂存器。如堆栈值(SP)系指示堆栈所在位置;旗号值(FLAG)表示旗号标志的情况;执行值(IP)则代表程式当前所执行的地址。这些暂存器值并非不能改变,但对技巧尚不够纯熟者,最好保持原值,不要妄动。 经常使用的「器」有两种,一以16位元为单位,如栈用器、源存器及终存器; 另一种则具有两个分别称「高位」及「低位」、各有8位元,可单独使用,也可合并为16位元的暂存器AX,BX,CX,DX。 暂存器通常作为容器用,但有些多用为记忆区之定址,以便将其中贮存的资料取出应用。前者称为容器功能,可以作计算、逻辑处理等。后者称为定址功能,系供处理各「器」所定位址的资料用。由于8088 CPU的定址方式,受限于当初不成熟的设计理念,偏偏 IBM独具慧眼,选中了它,所谓城门失火,殃及池鱼,读者不得不多花点功夫,小心应付。 栈用器(BP)属于堆栈段的记忆位置,系提供给高阶语言结构使用,对组合语言来说,功能不大,但若善于运用,也不无价值。 源存器(SI)固定指向资料段,将源存器中的资料取出,所指的是取出资料段中的资料。设若 DS=2000H SI=1234H,则 SI中的1234H 系指系统中 2000H×16加上位址值 1234H。 不过,使用者不必去计算,只要知道是由资料段起,位址为1234H 即可。 终存器(DI)较为复杂,通常它是指向资料段,可是有几个指令涉及大量资料转移,需要由源存器搬到终存器。由于受限于分段的设计,为了便于段间应用,所以特别规定:在这种情况下终存器系指向特设段(ES)。也就是说,只能由资料段移向特设段。程式师可以先设定各段的段暂存器,再作转移。若要在同一段中作资料转移,则应使资料段=特设段。 一般用的暂存器,都可以分成两个8位元、各命名为高、低位暂存器,如: 累积器:AX 高位 AH ,低位 AL 兼用器:BX 高位 BH ,低位 BL 计数器:CX 高位 CH ,低位 CL 资料器:DX 高位 DH ,低位 DL 其中累积器的功能最强,可以做乘、除计算,AH尚有贮存旗号的特殊指令。尤其是从记忆区中取值或将值放进记忆区内时,效率最高,如 LODS , STOSW等。 由于其功能高,运用灵活,所以宜于打杂,千万不要赋与固定的使命。 兼用器则有一种重要的特性,它是一般用暂存器中,唯一能自记忆区中读取资料者(XLAT指令除外),所以作为「资料及定址转换」 (后文将专门介绍此一功能) 方便异常。 计数器常用作「回路」或次数的记录,也有专用的指令,除非不得已,或者计数用得不多,最好保留备用。 资料器功能最少,最好固定其用途,选择经常需要应用的资料,置放其中,以便发挥时间空间的最高效率。
 
2/2 首页 上一页 1 2 |